我正在創建一個來自不同模型的屬性的嵌套表單。我希望在保存新對象之前,所有必需的屬性都是有效的。Rails - 如何驗證具有嵌套屬性的表單?
<%= form for @product do |f| %>
<%= f.fields_for @customer do |g| %>
<%= g.label :name %>
<%= g.text_field :name %>
<%= g.label :email %>
<%= g.text_field :email %>
<%= g.label :city %>
<%= g.text_field :city %>
<%= g.label :state %>
<%= g.text_field :state %>
<%= g.label :zipcode %>
<%= g.text_field :zipcode %>
<% end %>
<%= f.label :product %>
<%= f.text_field :product %>
<%= f.label :quantity %>
<%= number_field(:quantity, in 1..10) %>
<% end %>
這裏是我的模型
class Product < ActiveRecord::Base
belongs_to :customer
validates_associated :customer
validates :product, :presence => "true"
end
class Customer < ActiveRecord::Base
has_one :product
validates :name, :email, presence: true
validates :email, format: { with: /[A-Za-z\d+][@][A-Za-z\d+][.][A-Za-z]{2,20}\z/ }
validates :city, presence: true
validates :zipcode, format: { with: /\A\d{5}\z/ }
end
我加validates_associated
我的產品型號,所以我的form_for @product
應該要求所有的客戶驗證通過。這意味着名稱,電子郵件,城市和郵政編碼必須在那裏,並且必須正確格式化。
我亂了一下,提交了表格,沒有填寫客戶要求的字段,表格被認爲是有效的。
我不明白我的錯誤在哪裏。
編輯
好了,所以加入validates :customer
,現在需要的客戶屬性。但它們實際上並未保存到數據庫中。我認爲這與我的參數有關
def product_params
params.require(:product).permit(:product, :quantity)
end
是否需要將我的客戶參數添加到我的允許參數列表中?
OK,我嘗試添加'驗證:customer'現在需要的那場。但是當我輸入字段時,它說它缺失。這一定是因爲我的參數。我會看看我能否解決這個問題 – Darkmouse 2014-12-03 04:28:42