В частности, у меня есть форма для создания User
. Одним из полей является Group
, которое представляет собой отдельную модель. Во время действия User#create
я вызываю Group.find_or_create_by_name
, чтобы проверить, существует ли уже Group
, извлекая params[:user][:group]
, и создать Group
, если его не существует.
Но когда я создаю User
, я не могу передать params[:user]
, потому что params[:user][:group]
- это не группа, это String
. Это было бы намного проще, если бы я мог предоставить params[:user]
и params[:group]
своему контроллеру вместо всего, что связано в одну переменную, но я не знаю, как это сделать.
Соответствующий код:
Пользователь # создать
@group = Group.find_or_create_by_name(params[:user][:group])
@group.save!
@user = @group.users.build(params[:user])
Частичная схема пользователя
create_table "users", :force => true do |t|
t.string "name", :default => "", :null => false
t.string "email", :null => false
t.integer "group_id"
Частичная групповая схема
create_table "groups", :force => true do |t|
t.string "name"
t.text "description"
t.datetime "created_at"
t.datetime "updated_at"
Параметр Дамп из отправки формы
{"commit"=>"Register",
"authenticity_token"=>"x1KgPdpJop5H2NldsPtk0+mBDtrmpM/oNABOxjpabIU=",
"utf8"=>"✓",
"user"=>{"name"=>"aName",
"group"=>"aGroupName",
"password_confirmation"=>"[FILTERED]",
"password"=>"[FILTERED]",
"email"=>"anEmail"}}
Лучшее объяснение, с которым я столкнулся, это этот вопрос.
Я действительно не хочу начинать перестановку params
внутри моего контроллера, так как это действительно вызывает у меня тошноту и кажется ужасным программированием. Что действительно заставляет меня задаться вопросом, есть ли у меня большая проблема.
Если это противоречит соглашениям Rails, каков лучший способ сделать это, и почему я не должен это делать?