2015-02-20 3 views
0

В моей форме:Rails передать объект через форму выбора

<%= f.select :user, User.all %> 

Это создает отборное с коллекцией всех пользователей.

Когда я ударил представить, что в настоящее время передачи объекта в виде строки, выглядит следующим образом:

[3] pry(#<PermissionFormsController>)> params[:permission_form][:user] 
=> "John Doe <[email protected]> - Bar (something)" 

и

[4] pry(#<PermissionFormsController>)> params[:permission_form][:user].class 
=> String 

Я хотел бы получить объект, а, как current_user

[5] pry(#<PermissionFormsController>)> current_user 
=> Homer Simpson <[email protected]> - Foo (admin) 

Категория объекта: User:

[6] pry(#<PermissionFormsController>)> current_user.class 
=> User(id: integer, status: string, ...) 

Есть ли способ достичь этого?

ответ

2

Вы не можете передавать объекты Ruby непосредственно из формы на сервер, только строки. Ваш контроллер отвечает за превращение этих данных в реальные модели. Обычно это делается путем передачи объекта id и вызова YourModel.find в контроллере.

Таким образом, вы должны изменить свою форму, как это:

<%= f.select :user_id, User.all.map{|u| [u.to_s, u.id]} %> 

, а затем в действии вашего контроллера:

user = User.find(params[:permission_form][:user_id]) 

Надеется, что это помогает.

+0

это не сработает, потому что теперь 'params [: permission_form] [: user_id] =" John Doe <[email protected]> - Bar (что-то) "' как получить идентификатор? – neo

+0

Кажется, вы определили '' to_param'' в своей модели '' User'', не так ли? Вы можете удалить это, если оно вам не понадобится, или вместо этого используйте этот код: '' <% = f.select: user_id, User.all.map {| u | [u.to_param, u.id]}%> '' – dgilperez

+0

На самом деле у меня нет 'to_param' в моей модели User. – neo

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