通过带范围的关联保存时丢失属性 (Rails 4.0.0)

2023-11-26

代码(Rails 4.0.0)

class Track < ActiveRecord::Base
  has_many :artist_tracks
  has_many :owning_artists,
              -> { where(:artist_tracks => { :artistic_role_id => 1 }) },
              :through => :artist_tracks,
              :source => :artist
end

class ArtistTrack < ActiveRecord::Base
  belongs_to :artist
  belongs_to :track
  belongs_to :artistic_role
end

class Artist < ActiveRecord::Base
  has_many :artist_tracks
  has_many :tracks, :through => :artist_tracks
end

寻找作品

# artist_tracks.artistic_role_id is properly set to "1"
2.0.0p195 :003 > Track.last.owning_artists

  Track Load (1.1ms)  SELECT "tracks".* FROM "tracks" ORDER BY "tracks"."id" DESC LIMIT 1
  Artist Load (0.8ms)  SELECT "artists".* FROM "artists" INNER JOIN "artist_tracks" ON "artists"."id" = "artist_tracks"."artist_id" WHERE "artist_tracks"."artistic_role_id" = 1 AND "artist_tracks"."track_id" = $1  [["track_id", 10]]

创建不起作用

# artist_tracks.artistic_role_id is totally missing from the INSERT

2.0.0p195 :005 > Track.create!(name: "test_name", lyrics: "test_lyrics", owning_artist_ids: [1])

  Artist Load (1.3ms)  SELECT "artists".* FROM "artists" WHERE "artists"."id" = $1 LIMIT 1  [["id", 1]]
   (0.5ms)  BEGIN
  Artist Exists (0.7ms)  SELECT 1 AS one FROM "artists" WHERE ("artists"."name" = 'TestArtist1' AND "artists"."id" != 1) LIMIT 1
  SQL (0.7ms)  INSERT INTO "tracks" ("created_at", "lyrics", "name", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["created_at", Thu, 13 Jun 2013 22:20:14 UTC +00:00], ["lyrics", "test_lyrics"], ["name", "test_name"], ["updated_at", Thu, 13 Jun 2013 22:20:14 UTC +00:00]]
#
# Y U NO have artist_tracks.artistic_role_id?
#
  SQL (0.7ms)  INSERT INTO "artist_tracks" ("artist_id", "created_at", "track_id", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["artist_id", 1], ["created_at", Thu, 13 Jun 2013 22:20:14 UTC +00:00], ["track_id", 12], ["updated_at", Thu, 13 Jun 2013 22:20:14 UTC +00:00]]
   (1.0ms)  COMMIT

根据Rails 活动记录关联指南(4.3.3.1 位置),我相信我对范围和期望的使用是有效的:

如果您使用散列样式的 where 选项,则通过此记录创建 关联将使用哈希自动确定范围。

为什么是artist_tracks.artistic_role_id属性丢失?如果我的期望是错误的,我想了解为什么以及如何实施替代解决方案。

我也将其列为Rails 存储库上的一个问题。任何见解表示赞赏!谢谢


我相信正在发生的事情是这里实际创建的关联模型是连接模型,artist_tracks,而不是与实际情况的关联。您可以通过声明一个带有条件的备用连接关联来解决此问题,然后附加owning_artists通过它来代替。像这样:

class Track < ActiveRecord::Base
  has_many :artist_tracks
  has_many :owning_artist_tracks,
              -> { where(:artistic_role_id => 1) },
              :class_name => "ArtistTrack"
  has_many :owning_artists,
              :through => :owning_artist_tracks,
              :source => :artist
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过带范围的关联保存时丢失属性 (Rails 4.0.0) 的相关文章

随机推荐

  • 通过 NTLM 模拟用户

    我有一个内部应用程序 有两个安全级别 用于面向客户端的应用程序的 FormsAuthentication 和用于管理界面的 NTLM 集成身份验证 我可以通过使用 FormsAuthentication 类的方法创建正确的 ASPXAUTH
  • 如何在 WooCommerce 评论表单上添加“评论标题”字段?

    I want to add a custom field to my reviews form on WooCommerce just like this image And then how to get the output of th
  • Retrofit 2.0中如何使用拦截器添加Headers?

    我们的团队决定采用改造2 0我正在对此进行一些初步研究 我是这个图书馆的新手 我想知道如何使用interceptor通过添加自定义标头改造2 0在我们的 Android 应用程序中 有许多教程关于使用interceptor在Retrofit
  • 将自定义属性包装器与@Published相结合

    我希望将自定义属性包装器应用于已包装的变量 Published 像这样嵌套它们 A Custom Published var myVar or B Published Custom var myVar 注意包装纸的应用顺序 如果是 A 我收
  • 服务器(PC)上的实时视频流来自机器人通过 UDP 发送的图像

    唔 我发现这似乎很有希望 http sourceforge net projects mjpg streamer 好的 我将尝试清楚 详细地解释我想做的事情 我有一个带有摄像头和 wifi 棒的小型人形机器人 这是机器人 机器人的 WiFi
  • 至少 8 + 大小写 + 数字或其他非字母的正则表达式

    至少包含 8 个字符 包含大写和小写字母 包含数字或其他非字母字符 上述标准的正则表达式可能是什么 我正在创建一个更强的密码检查 我正在使用c 这应该可以做到 a z A Z a zA Z 8 看这里 rubular 解释 a z look
  • 带有输入和输出的 std::fstream 应该如何工作?

    我刚刚开始想知道 实际上是怎样的std fstream两者都打开std ios in and std ios out实际上应该工作吗 它应该做什么 向 例如 空文件写入一些内容 然后读取 什么 只是写值吗 文件 指针 光标 在哪里 也许答案
  • 打印组合字符串和数字

    要在Python中打印字符串和数字 除了执行以下操作之外还有其他方法吗 first 10 second 20 print First number is first d and second number is second d first
  • Ember 组件中的共享状态

    我试图构建一个简单的列表 其中附加小部件作为 Emberjs 组件 以下是我使用的代码 HTML
  • 如何使用 async/await 去抖?

    我有一个输入框 用户停止输入后 我想执行 HTTP 请求并等待结果 这是一个jsbin 由于 jsbin 上不允许网络请求 所以我使用了setTimeout 反而 var log console log bind console var d
  • PowerShell 删除项目不等待

    如果有这段代码 if Test Path Path OUT Remove Item OUT Recurse New Item ItemType directory Path OUT 有时它可以工作 但有时 New Item 行会产生一个权限
  • 通配符子域和静态子域的虚拟主机

    我有一个奇怪的情况 我想要 URLapp1 example com example com and example com全部使用不同的虚拟主机 这就是我所拥有的 不包括example com因为它只会让事情变得更加混乱
  • JNI:无法从回调中的本机方法找到 java 类

    我对 JNI 还很陌生 并且正在努力解决这个问题 我有一个由网络库 alljoyn 调用的 C 回调 在这个回调中 我需要调用Java代码 由于此回调位于另一个线程中 因此我使用以下代码来获取 JNIEnv 指针 jvm是全局指针 JNIE
  • HTML5 canvas ctx.fillText 不会换行吗?

    如果文本包含 n 我似乎无法将文本添加到画布 我的意思是 换行符不显示 工作 ctxPaint fillText s ome n n br thing x y 上面的代码将会绘制 s ome n br thing 在一条线上 这是 fill
  • iPhone:以编程方式使用前置摄像头拍照

    我想通过我的 iPhone 应用程序中的前置摄像头以编程方式拍照 我不希望用户选择图像选择器或与图像选择器进行任何交互 只想拍摄图像并将其保存在文档中 这可能吗 我从你的问题中了解到 AV Foundation 就是你所需要的 看看苹果的这
  • MySQL - 从字符串中搜索确切的单词

    我想从字符串中搜索确切的单词 例如 id Description 1 This is nice pen looking good 2 This is nice pendrive looking good 搜索字符串 pen 我当前的查询 S
  • 是否可以设置更高的轴标签 z 索引?

    在以下代码中 轴的标签隐藏在图形线后面 import numpy as np import matplotlib pyplot as plt X np linspace np pi np pi 256 endpoint True C S n
  • Linq int 到 string

    如何将 和 int 转换为字符串 以下均无效 from s in ctx Services where s Code ToString StartsWith 1 select s from s in ctx Services where C
  • 如何使用SQL查找表中N个连续记录

    我有以下带有示例数据的表定义 在下表中 客户产品和日期是关键字段 Table One Customer Product Date SALE X A 01 01 2010 YES X A 02 01 2010 YES X A 03 01 20
  • 通过带范围的关联保存时丢失属性 (Rails 4.0.0)

    代码 Rails 4 0 0 class Track lt ActiveRecord Base has many artist tracks has many owning artists gt where artist tracks gt