2016-02-27 52 views
0

刪除屬性名稱我有兩個型號user_itemuser_item_images軌道4 - 從錯誤消息關聯的模型存在

user_item.rb

has_many :user_item_images, dependent: :destroy 
validates :user_item_images, presence: { message: "You must include a picture" } 

user_item_images.rb

belongs_to :user_item 

我與只有一個user_item_image字段,它是:picture嵌套形式。當我提交一個空的形式,我得到這個消息

用戶的物品圖像必須包括圖片

如何讓這個消息,而不是說

您必須包括一張圖片

我不知道如何編輯en.yml文件,因爲錯誤是在另一個模型的存在,而不是一個attr模特的西莫。

我看着here但得到的答覆是太寬泛,我想我需要一個自定義的驗證。

+0

[使用Rails完全定製的驗證錯誤消息(的可能的複製http://stackoverflow.com/questions/808547/fully-custom-validation-error-message-with-rails ) – jeffdill2

+0

我不這麼認爲。該答案含糊不清,我相信我需要一個自定義驗證來解決我的問題。 – user4584963

+0

是的,你需要自定義驗證。檢查出這個問題,這些2個答案 - http://stackoverflow.com/a/10635913/2266827,http://stackoverflow.com/a/33292528/2266827。他們會給你你需要的。 – jeffdill2

回答

2

創建自定義的驗證,而不是:

has_many :user_item_images, dependent: :destroy 
validate :has_a_picture 

private 

def has_a_picture 
    errors.add(:base, 'You must include a picture') if user_item_images.none? 
end 
+0

我爲什麼還要包含'presence:...'? – user4584963

+0

其實我試過用你的[猴子補丁](http://stackoverflow.com/a/34347478/4584963)。它對'user_item_images'中的圖片屬性非常有效,但不適用於關聯的存在。 – user4584963

+0

我得到這個錯誤信息'「未定義的方法'沒有?'爲:user_item_images:符號「'所以我改變了方法'...如果self.user_item_images.none?'。我唯一的問題是,我必須確定,除非有關聯的'user_item_image',否則永遠不能創建'user_item'。這個驗證會完成這個嗎? – user4584963

0

對於這一點,在你的user_item_images模型,你需要: validates :picture, presence: true 你也可以想看看你是否有數據建模問題需要解決。無論如何,您當前的驗證只會驗證該關聯是否存在。因此,當您提交帶有空白圖片字段的user_item_images表單時,失敗的驗證是您的user_item模型中的驗證。而不是嘗試更改關聯存在驗證錯誤消息的內容,請爲user_item_images中的圖片列添加驗證。這樣,如果圖片是空的,它會提出'你必須包含圖片'。

我也會評論說具有存在驗證:在user_item模型user_item_images不應該是必要的,可能表明,你需要解決一個更大的數據建模問題。

+0

我想你可能會對我的模型的設置感到困惑。除非有關聯的'user_item_image',否則'user_item'不應該存在。我有消息「」你必須包含圖片「」的原因是因爲這是用戶能夠添加到「user_item_image」的唯一屬性。 – user4584963

0

有沒有必要寫額外的代碼。您應該使用內置I18n的Rails來自定義ActiveRecord錯誤消息。

內部config/locales/en.yml

en: 
    activerecord: 
    errors: 
     models: 
     user_item: 
      attributes: 
      user_item_images: 
       presence: "You must include a picture" 
+0

你的建議沒有奏效。有了這個更改,我仍然收到相同的錯誤消息,並且該屬性名稱仍然存在。 – user4584963