我在Rails协会中遇到了一个问题:
我有3个型号:用户,公司和公司成员
# ID :integer not null,primary keyclass User < ActiveRecord::Base has_one :company_member has_one :company,through: :company_memberend# ID :integer not null,primary key# name :string(255) not nullclass Company < ActiveRecord::Base has_many :company_members has_many :members,through: :company_members,foreign_key: "user_ID",source: :user has_many :admins,-> {where admin: true },source: :userend# ID :integer not null,primary key# company_ID :integer# user_ID :integer# admin :boolean# created_at :datetime# updated_at :datetimeclass CompanyMember < ActiveRecord::Base belongs_to :company belongs_to :userend
用户只能拥有一家公司.他可以成为这家公司的管理员.公司可以拥有多个管理员.
所以,当我想向我所做的公司添加一名成员时:company.members<<用户.它正在工作:当我查询company.members时它返回用户并且company_member记录就像
{user_ID:5,company_ID:8,admin:false}
现在我想添加一个用户作为管理员:我必须做的是:company.admins<<用户
那么company.members应该返回与company.admins相同的用户
和company_member记录应该是一样的
{user_ID:5,admin:true}
通过Rails协会可以吗?因为实际上它不起作用:/:company_member记录为{user_ID:5,admin:false}
你能帮助我吗 ?
谢谢 !
我正在使用Rails 4.1.3和ruby 2.1.2
解决方法 在has_many关系中指定范围时,只能自定义has_many使用的查询.因此,如果您将用户添加到公司的管理员列表中,则不会将其设置为管理员.您可以通过设置关联回调来实现此目的. Rails将要添加或删除的对象传递给回调,您可以将其设置为admin.
class Company < ActiveRecord::Base has_many :company_members has_many :members,source: :user,after_add: :set_user_as_admin def set_user_as_admin(user) user.company_member.update(admin: true) endend总结
以上是内存溢出为你收集整理的ruby-on-rails – 使用关联创建模型实例全部内容,希望文章能够帮你解决ruby-on-rails – 使用关联创建模型实例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)