RoR: collection_select не устанавливает значение в БД

#ruby-on-rails-3

#ruby-on-rails-3

Вопрос:

Я использую Rails 3, и у меня возникла проблема. У меня collection_select не заполняется поле в БД. Вот как выглядит мое представление: (был удален некоторый html)

 f.label "Company Name"
@c = Company.all
collection_select(:Company , :company_id, @c, :id , :companyName, {:prompt => true})   
f.submit
  

Выпадающий список содержит правильные значения, но когда я отправляю его, вот как params выглядит мой: "Company"=>{"company_id"=>"2"} . У меня нет поля с именем company , но у меня есть поле с именем company_id и таблица с именем company . Правильный ли мой синтаксис?

 Processing by RecordsController#create as HTML

Parameters: {"utf8"=>"✓", "authenticity_token"=>"WLzwCoZFCUhyH9ZqYWYLmaQwyleB3JLoTnb4lhftKzc=", "record"=>{"title"=>"test", "Company"=>{"company_id"=>"2"}, "commit"=>"Create record"}

AREL (2.0ms)  INSERT INTO "records" ("company_id", "title", "created_at", "updated_at") VALUES (NULL, 'test','2011-05-17 05:01:38.905717', '2011-05-17 05:01:38.905717')
Redirected to http://localhost:3000/Records/7
Completed 302 Found in 150ms
  

Комментарии:

1. Не уверен, что это помогает, но я хочу прояснить одну вещь. В Rails у вас будет параметр верхнего уровня, который содержит параметры для связанного объекта модели. Итак, «Company», которая указывает на фактические параметры, — это то, что нужно отправить в update_attributes , или new, или что вы вызываете, чтобы повлиять на модель в базе данных.

Ответ №1:

Попробуйте это

 # in controller
@companies = Company.all

collection_select @record, :company_id, @companies, :id, :companyName
  

или

 form_for @record do |f|
  = f.collection_select :company_id, @companies, :id, :companyName