2016-02-16 64 views
0

我試圖在我的模型Company中進行一些有條件驗證。基本上這個想法是Company被許多不同的控制器使用,每個控制器都有自己的驗證要求。我的想法是使用attr_accessor補充說,識別控制器有問題,像這樣的屬性:使用attr_accessor進行條件驗證使用attr_accessor

<%= company.hidden_field :controller_context, value: "incorporation" %> 

但是,我已經無法使用:controller_context在我的驗證的條件。

validate :final_incorporation, if: "controller_context=='incorporation'" 

上面給我沒有錯誤,但不觸發驗證。但是,如果我嘗試用下面得到的controller_context值在我的日誌:

logger.debug "controller_context: #{controller_context}" 

我得到的錯誤

undefined local variable or method `controller_context' 

我已經在谷歌四處尋找一個解決方案。我見過一個建議,編輯我的控制器以適應這種情況,但由於各種原因,這看起來並不理想。我可能會在這裏錯過什麼?

在此先感謝。

+0

你是什麼意思時,你說這是由很多控制器_used_? –

+0

@JawadKhawaja感謝您的迴應;這意味着它是由它們引用的。公司可以通過合併,上限表或可轉換票據進行編輯。所有這些都有自己的具體要求,需要驗證。 – neanderslob

回答

3

你最初的想法似乎很實際。我不完全確定您的隱藏字段的值是否在模型中可用。試試這樣,讓我知道它是怎麼回事:

attr_accessor :controller_context給你模型。在您的控制器中,在調用保存之前,將您的控制器名稱分配給@company.controller_context

然後同時在模型驗證添加一個條件,如: validate :final_incorporation, if: :is_incorporation

而且在方法:

def is_incorporation? 
    controller_context == 'incorporation' 
end