在 has_many :through 关系中使用 collection<
2024-03-11

定义 has_many :through 关系后,

@user = User.New(:name=>"Bob")
@project = Project.New( :name=>"Market Survey")
@user.projects << @project

有没有一种简单的方法来获取它创建的新中间对象?例如在上面的示例中,如果中间表是“memberships”,那么我可以使用:

@membership = @user.projects << @project

我有一种感觉,一定有一种比我们一直在做的更好的方法,即

@membership = Membership.where(:user_id=>x , :project_id=>y).first

据我所知,没有什么“神奇”的方法可以做到这一点。如果你正在寻找比你迄今为止所做的更好的东西,我能想到的最好的办法就是做这样的事情:

class User < ActiveRecord::Base
  # ... other active record stuff here.

  def membership_for(project)
    memberships.where(:project_id => project.id).first
  end
end

# Somewhere else...
@user = User.new(:name=>"Bob")
@project = Project.new(:name=>"Market Survey")
@user.projects << @project
@user.save!

membership = @user.membership_for(@project)

并不完美,并且需要额外的代码,但它确实比您当前的代码可读性更好,这在 Ruby 中非常重要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 has_many :through 关系中使用 collection<

随机推荐