ruby-on-rails – 使用关联创建模型实例

ruby-on-rails – 使用关联创建模型实例,第1张

概述我正在开发一个Rails应用程序. 我在Rails协会中遇到了一个问题: 我有3个型号:用户,公司和公司成员 # id :integer not null, primary keyclass User < ActiveRecord::Base has_one :company_member has_one :company, through: :company_memberend 我正在开发一个Rails应用程序.
我在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 – 使用关联创建模型实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1269866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存