加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何使用has_many:through和honor:condition

发布时间:2020-12-16 19:12:27 所属栏目:百科 来源:网络整理
导读:假设我有一个课程,学生可以通过会员注册(例如课程和学生的has_and_belongs_to_many关系).有些会员资格是针对刚刚观看课程的学生(不是为了学分等),所以: class Course ActiveRecord::Base has_many :memberships has_many :students,:through = :memberships
假设我有一个课程,学生可以通过会员注册(例如课程和学生的has_and_belongs_to_many关系).有些会员资格是针对刚刚观看课程的学生(不是为了学分等),所以:
class Course < ActiveRecord::Base
  has_many :memberships

  has_many :students,:through => :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的成员资格!

我想出的最后一个丑陋的解决方法是手动创建Membershiprecord:

Membership.create!(:course => Course.first,:student => Student.first,:observer => true)

我已经created a ticket for this了,早餐后我会进一步调查.

编辑:我已按照承诺进一步调查并发现您是否更改了:条件哈希到数组,例如:

:conditions => ["memberships.observer = ?",true]

它按预期工作.我还有一个github repository,带有示例代码和复制说明.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读