2015-11-17 62 views
2

組件has_many文本。 我使用組件模型的嵌套屬性來創建文本。 我也有複選框選擇先前創建的文本(多通過)驗證新條目或關聯

對於每個組件,我只能選擇一個文本。

如何驗證文本的組件? 它應該看看是否有一個複選框被選中(在以前的文本) 或者它應該驗證創建一個新的文本(textarea min 5)

我該怎麼做?

謝謝! - 文森特

+0

如果在組件上只能有一個文本,那麼爲什麼has_many關聯而不是has_one? – Deep

+0

現在我只使用一個文本,但我希望可以選擇使用很多(用於將來的更新)。 – Vincent

回答

0

從軌道validations documentation

如果你想確保關聯是存在,你需要測試相關的對象本身是否存在,並且不使用外鍵來映射關聯。

class LineItem < ActiveRecord::Base 
    belongs_to :order, inverse_of: :line_items 
    validates :order, presence: true 
end 

雖然我不認爲這是你在找什麼,它一定會幫助你。

-

我不認爲你需要的是你可以做什麼的定義:

  • 驗證accepts_nested_attributes_for(新記錄)
  • 驗證association(協會數據)

如果你希望驗證相關對象上創建,你會能夠把驗證的相關模型,然後將通過其中任何一個回當前的模型:

#app/models/component.rb 
class Component < ActiveRecord::Base 
    has_many :texts, inverse_of: :component 
    accepts_nested_attributes_for :texts 
end 

#app/models/text.rb 
class Text < ActiveRecord::Base 
    belongs_to :component, inverse_of: :texts 
    validates :param, presence: true 
end 

這將拒絕text記錄,如果它沒有上創建param集。

-

如果你加載一個text對象,並希望以驗證現有text可用等等 - 你想使用下列內容:

#app/models/component.rb 
class Component < ActiveRecord::Base 
    has_many :texts 
    validates_associated :texts 
end 

這可以確保所有的associatedtexts有效。