有没有更好的方法来获得多对多的协会记录' ActiveRecord

时间:2015-05-20 14:31:56

标签: ruby-on-rails activerecord

我创建了两个具有多对多关联的模型(User,Project)并创建了一个关联表(ProjectUser):

class User < ActiveRecord::Base
  attr_accessor :name, :email
  has_many :project_users
  has_many :projects, through: :project_users
end

class Project < ActiveRecord::Base
  attr_accessor :name, :address
  has_many :project_users
  has_many :users, through: :project_users
end

class ProjectUser < ActiveRecord::Base
  belongs_to :project
  belongs_to :user
end

指定关联后,我可以获得这样的用户项目:

projects = User.find('user_id').projects

如果我只想要项目名单,那么有没有像这样的方法:

# This will get NoMethod error
project_names = User.find('user_id').projects.names

现在我这样做:

project_names = User.find('user_id').projects.map {|project| project.name}

我想知道是否有这样的语法糖:)

1 个答案:

答案 0 :(得分:0)

如果您想要的是名称,您应该可以在project_users表上进行连接,只需输入名称:

project_names = Project.joins(:project_users).where(user_id: 'user_id').pluck(:name)

如果您已经拥有该用户,那么我就像您一样通过该协会来完成。

@user = User.find(params[:id])
project_names = @user.projects.pluck(:name)

关于采摘here

的更多信息