我创建了两个具有多对多关联的模型(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}
我想知道是否有这样的语法糖:)
答案 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
的更多信息