2011-07-07 40 views
0

我有一個模型,如下所示:可以移除一些錯誤消息的Rails 3

class Greeting < ActiveRecord::Base 

     attr_accessible :icon, :content, :name 

     belongs_to :user 
     belongs_to :board 

validates :user_id, :presence => true 
    validates :board_id, :presence => true 

我不想向用戶顯示錯誤消息,如果沒有用戶模型或主板型號。 我也做了以下內容:

after_validation :remove_errors_for_user_board 

    def remove_errors_for_user_board 
    self.errors.delete_if{ |key,value| key == :user_id || key == :board_id } 
    end 

所以基本上我刪除任何錯誤消息的這些屬性。 這是好的,是最好的辦法嗎?

感謝NOOB工作。

+0

當出現錯誤,特別是因爲您實際上需要用戶和董事會以創建問候語時,刪除錯誤消息似乎有點違反直覺。 編輯(因爲我不小心按下了輸入): 您可能想要確保在沒有用戶和董事會附加問候語的情況下添加問候語是沒有辦法的? – Frost

+0

沒有板子就沒有辦法添加問候語,但是可以在沒有用戶的情況下添加問候語。所以我脫掉了用戶的驗證。然後我用@ board.greetings.build(params [:greeting])建立一個問候語。如果沒有第一張紙板,沒有辦法找到問候語。我只是不想將錯誤信息顯示給用戶,說他們不會理解這個板子。也許我不需要驗證這一點,因爲必須有董事會? – chell

回答

0

我不完全理解你在說什麼。但是,如果你說如果沒有用戶或沒有董事會,你希望沒有錯誤。然後這將工作...

validates_presence_of :name, :if => :board_or_user_is_present 

def if_board_or_user_is_present 
    board.present? or user.present? 
end 
+0

這看起來很有趣。我可以從問候語對象中訪問當前板對象或用戶對象嗎? – chell

+0

這取決於它的設置。如果它在你的application_controller中,不。您必須將其作爲變量傳遞給您的創建。如果你在這裏遇到問題,那太棘手了。 –