【问题标题】:Rails 4 - set conditional default value in join table on create actionRails 4 - 在创建操作时在连接表中设置条件默认值
【发布时间】:2014-04-19 19:51:57
【问题描述】:

我有一个包含三个模型的数据模型,Team 有很多 UsersMembers(连接表)。我的 Member 模型有一个 admin 布尔列。当用户创建一个新团队(注册)时,我想将该Useradmin 字段设置为true。我不确定这样做的最佳方法是什么。我尝试了以下方法:

# Team.rb (model for team)

[...]

after_save :set_admin

private

    def set_admin

      self.members.first.admin = true

    end 

这会导致零指针错误(self.members.first == nil)

那么,什么是正确的 Rails 方法来做我想做的事? (当用户创建一个新团队时,也让该用户成为该团队的管理员。)

更新

我的模型关联如下所示:

# Team.rb
has_many :members
has_many :users, through: :members

# Member.rb
belongs_to :user
belongs_to :team

# User.rb
has_many :members
has_many :teams, through: :members

【问题讨论】:

  • 粘贴您的会员和用户型号代码。
  • 我已经添加了相关的模型代码(我的关联)。

标签: ruby-on-rails ruby activerecord ruby-on-rails-4 has-many-through


【解决方案1】:

改用after_add

has_many :members, after_add: Proc.new { |u, m| m.first.admin = true; m.save }

【讨论】:

  • 认为它有效。没有收到任何错误。但是这个解决方案似乎根本没有设置 admin 值,当我稍后尝试检查该值时,它是 nil。
  • 我似乎使用 proc 得到了相同的结果,但没有设置值。
  • 您是否打算在创建用户时(即用户“注册”时)创建新团队?或者用户是否已经存在并且稍后“创建了一个新团队”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 2010-11-14
  • 2014-05-18
相关资源
最近更新 更多