具有代表和条件的活动记录

Fou*_*usa 30 ruby activerecord delegates ruby-on-rails

是否可以在Active Record模型中使用委托并使用类似的条件:if

class User < ApplicationRecord
  delegate :company, :to => :master, :if => :has_master?

  belongs_to :master, :class_name => "User"

  def has_master?
    master.present?
  end
end
Run Code Online (Sandbox Code Playgroud)

Sim*_*tti 36

不,你不能,但:allow_nil => true如果主人是零,你可以通过选项返回nil.

class User < ActiveRecord::Base
  delegate :company, :to => :master, :allow_nil => true

  # ...
end

user.master = nil
user.company 
# => nil

user.master = <#User ...>
user.company 
# => ...
Run Code Online (Sandbox Code Playgroud)

否则,您需要编写自己的自定义方法,而不是使用委托宏来获得更复杂的选项.

class User < ActiveRecord::Base
  # ...

  def company
    master.company if has_master?
  end

end
Run Code Online (Sandbox Code Playgroud)