Rails通过表单选择传递对象

时间:2015-02-20 15:40:56

标签: ruby-on-rails

以我的形式:

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

这将生成一个包含所有用户集合的选择。

当我点击提交时,它当前将对象作为字符串传递,如下所示:

[3] pry(#<PermissionFormsController>)> params[:permission_form][:user]
=> "John Doe <John.Doe@foo.com> - Bar (something)"

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

我希望得到这个对象,比如current_user

[5] pry(#<PermissionFormsController>)> current_user
=> Homer Simpson <homer@gmail.com> - Foo (admin)

哪个是班级User的对象:

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

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分: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])

希望这有帮助。