簡體   English   中英

具有代表和條件的活動記錄

[英]Active Record with Delegate and conditions

是否可以在Active Record模型中使用委托並使用以下條件:if on it?

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

  belongs_to :master, :class_name => "User"

  def has_master?
    master.present?
  end
end

不,您不能,但如果master為nil,您可以傳遞: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 
# => ...

否則,您需要使用委托宏編寫自己的自定義方法,以獲得更復雜的選項。

class User < ActiveRecord::Base
  # ...

  def company
    master.company if has_master?
  end

end

我需要將相同的方法委托給兩個模型,更喜歡使用一個模型而不是另一個模型。 我使用了:prefix選項:

來自individual.rb

delegate :referral_key, :email, :username, :first_name, :last_name, :gender, :approves_email, :approves_timeline, to: :user, allow_nil: true, prefix: true                                
delegate :email, :first_name, :last_name, to: :visitor, allow_nil: true, prefix: true

def first_name
  user.present? ? user_first_name : visitor_first_name
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM