ruby-on-rails - 在 has_many :through relationships 中使用 collection<<object 函数时如何获取中间对象

标签 ruby-on-rails ruby-on-rails-3 has-many-through

定义 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 中非常重要。

关于ruby-on-rails - 在 has_many :through relationships 中使用 collection<<object 函数时如何获取中间对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370013/

相关文章:

ruby-on-rails - Rails 3 + JQuery 文件上传 + 嵌套模型

ruby-on-rails - 我可以使用相同的 s3 存储桶进行暂存和生产吗?

jquery - 在使用 jQuery 的 prop 方法时,如何使用 Capybara 测试表单元素是否被禁用?

ruby-on-rails - Rails 资源路径中的 CSS 在开发过程中未被 ERB 处理

ruby-on-rails - Rails has_many 通过条件,构建新的

ruby-on-rails - 即使使用 bundle exec 也会出现 "You have already activated"消息

ruby-on-rails - mongoid where 与 has_many 关系

ruby-on-rails - Ruby on Rails - 捆绑安装期间出错

mysql - 通过验证 has_many 中的唯一性

mysql - 你如何通过关系获得 Rails has_many 来处理 has_many 条件?