加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:06:57 所属栏目:百科 来源:网络整理
导读:我正在开发一个Rails应用程序. 我在Rails协会中遇到了一个问题: 我有3个型号:用户,公司和公司成员 # id :integer not null,primary keyclass User ActiveRecord::Base has_one :company_member has_one :company,through: :company_memberend# id :integer
我正在开发一个Rails应用程序.
我在Rails协会中遇到了一个问题:
我有3个型号:用户,公司和公司成员

#  id :integer not null,primary key
class User < ActiveRecord::Base
  has_one :company_member
  has_one :company,through: :company_member
end

#  id          :integer          not null,primary key
#  name        :string(255)      not null
class 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: :user
end

#  id         :integer          not null,primary key
#  company_id :integer
#  user_id    :integer
#  admin      :boolean
#  created_at :datetime
#  updated_at :datetime
class CompanyMember < ActiveRecord::Base
  belongs_to :company
  belongs_to :user
end

用户只能拥有一家公司.他可以成为这家公司的管理员.公司可以拥有多个管理员.

所以,当我想向我所做的公司添加一名成员时: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)
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读