Я создаю вложенную форму с атрибутами из разных моделей. Я ожидаю, что все необходимые атрибуты будут действительными до того, как будет сохранен новый объект.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
должны требовать все валидаций клиента пройти. Это означает, что имя, адрес электронной почты, город и почтовый индекс должны быть там и должны быть отформатированы должным образом.
Я пробормотал и представил форму без заполнения поля, требуемого Клиентом, и форма считалась действительной.
Я не понимаю, где моя ошибка.
EDIT
Хорошо, так что, добавив validates :customer
, атрибуты клиента в настоящее время требуется. Но они фактически не сохраняются в базе данных. Я думаю, что это связано с моим Params
def product_params
params.require(:product).permit(:product, :quantity)
end
мне нужно добавить мой клиент Params в мой список разрешенных Params ли?
ОК, я попробовал, добавив 'проверяет: customer' и теперь требуется, чтобы поле. Но когда я печатаю в поле, он говорит, что он отсутствует. Это должно быть из-за моих параметров. Я посмотрю, смогу ли я исправить это – Darkmouse