以我的形式:
<%= 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, ...)
有没有办法实现这个目标?
答案 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])
希望这有帮助。