2009-05-25 1 views
1

Если я говорю об этом в контроллере:Создание объектов модели из необработанных данных - требуется взаимно однозначное совпадение полей?

@order = Order.new(params[:order]) 

Что требуется для этой работы?

Должно ли быть взаимное совпадение между всеми полями в params[:order] и моделью заказа?

Или может быть больше или меньше полей в params[:order], чем требуется для создания экземпляра заказа?

ответ

1

params [: order] сам должен быть хешем, где каждый ключ является именем поля модели. Чтобы узнать, как Rails преобразует имена полей формы в хэш-параметры params, напишите шаблон представления с помощью form_for helper и источника представления.

Может быть больше или меньше полей, да. Дополнительные поля будут проигнорированы. Меньшие поля просто не будут скопированы в объект экземпляра. Вам совсем не нужно создавать экземпляр объекта ActiveRecord. (Действительность объекта и сохранение - другая история - они вызывают проверки и механизм обратного вызова ActiveRecord.)

+0

Итак, нет проблем с созданием объекта - проблемы, с которыми вы можете столкнуться, - это когда вы пытаетесь сохранить или обновить. В этом случае меньшее количество полей может нарушать требования к базе данных, но не до тех пор. – eggdrop

+0

Да, точно. Проверки не выполняются до тех пор, пока вы не сохраните объект или не вызовете .valid? или .invalid. Подробнее здесь: http://guides.rubyonrails.org/activerecord_validations_callbacks.html – Raphomet

1

На самом деле действительно может быть меньше полей.

Убедитесь, что у вас есть все поля, необходимые для любых проверок!

+0

Может ли быть еще больше полей в форме, чем в модели? Будет ли ActiveRecord просто игнорировать посторонние? – eggdrop

Смежные вопросы