在我的表格中:
<%= f.select :user, User.all %>
Run Code Online (Sandbox Code Playgroud)
这会生成一个包含所有用户集合的选择。
当我点击提交时,它当前正在将对象作为字符串传递,如下所示:
[3] pry(#<PermissionFormsController>)> params[:permission_form][:user]
=> "John Doe <John.Doe@foo.com> - Bar (something)"
Run Code Online (Sandbox Code Playgroud)
和
[4] pry(#<PermissionFormsController>)> params[:permission_form][:user].class
=> String
Run Code Online (Sandbox Code Playgroud)
我更想得到这个对象,比如current_user
[5] pry(#<PermissionFormsController>)> current_user
=> Homer Simpson <homer@gmail.com> - Foo (admin)
Run Code Online (Sandbox Code Playgroud)
这是类的对象User:
[6] pry(#<PermissionFormsController>)> current_user.class
=> User(id: integer, status: string, ...)
Run Code Online (Sandbox Code Playgroud)
有办法实现这一点吗?
您不能将 Ruby 对象直接从表单传递到服务器,只能传递字符串。您的控制器负责将这些数据转化为实际模型。这通常是通过传递对象id并YourModel.find在控制器中调用来完成的。
所以你需要像这样改变你的形式:
<%= f.select :user_id, User.all.map{|u| [u.to_s, u.id]} %>
Run Code Online (Sandbox Code Playgroud)
然后在控制器的操作中:
user = User.find(params[:permission_form][:user_id])
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1337 次 |
| 最近记录: |