如何使用has_many:through和honor:conditions创建新记录?
假设我有一个课程,学生可以通过会员注册(例如课程和学生的has_and_belongs_to_many关系)。 有些会员资格是针对刚刚观看课程的学生(不是为了学分等),所以:
class Course :memberships has_many :observers, :through => :memberships, :source => :student, :conditions => { :memberships => { :observer => true }} end
这是有用的:
observers = Course.find(37).observers
这是不起作用的:
new_observer = Course.find(37).observers.build(:name => 'Joe Student')
我原本以为可以使用该关联构建新记录,这会产生:
- 新学生记录(’Joe Student’)
- 新的会员记录(course_id = 37,student_id =(joe),observer = true)
但相反,我得到:
ActiveRecord::AssociationTypeMismatch: Membership expected, got Array
我敢肯定,我对这是多么的困惑,并会欣赏任何见解! 我也尝试在Membership模型上使用命名作用域执行此操作,但我似乎无法使用has_many在关联中使用作用域。
非常感谢您提供任何帮助!
我相信你遇到了一个Rails错误。 我在我的盒子上尝试了相同的东西(2.3.4),它给了我同样的错误,这似乎根本不对。 另外我还尝试了以下方法:
course = Course.first course.observers << Student.create(:name => "Joe Student") course.save
但这会创建一个观察者字段设置为false的成员资格!
我想出的最后一个丑陋的解决方法是手动创建Membership
记录:
Membership.create!(:course => Course.first, :student => Student.first, :observer => true)
我为此创造了一张票 ,我将在早餐后进一步调查。
编辑 :我已按照承诺进一步调查并发现您是否更改了:conditions
哈希到数组,例如:
:conditions => ["memberships.observer = ?", true]
它按预期工作。 我还有一个github存储库,其中包含示例代码和复制指令。
- Mysql ::错误:重复条目
- postgresql,奇怪的OFFSET / LIMIT行为(记录顺序)
- Rails 3 – 轻松使用Pascal Case列名
- memcache在使用acts_as_cached插件时获取错误的值
- Rails 4更新嵌套属性
- ruby(1.9.3)on rails(3.2.3)Activerecord-odbc-adapter
- 如何测试ActiveRecord中哪些validation失败?
- 加载Ruby on Rails模型而不加载整个框架
- 在尝试保存大(ish)整数值时,获取指示编号的错误“超出ActiveRecord :: Type :: Integer且限制为4”的范围