Cam*_*ron 2 model-view-controller ruby-on-rails
假设我有一个带有选择菜单的form_for,用于在belongs_to关联上分配用户:
...
form.select :user_id, @users, :prompt => "Select a User"
...
Run Code Online (Sandbox Code Playgroud)
目前我在控制器中有@users如下:
@users = User.all.map { |u| [u.full_name, u.id] }
Run Code Online (Sandbox Code Playgroud)
我觉得这个逻辑可能会转移到帮助者甚至模型中.但我很困惑在哪里处理这个以及如何处理.
一般答案取决于您使用它的频率:
但是在你的情况下,答案不是上述情况,而是停止尝试重新发明轮子.人们尝试使用Rails的事情中,大约95%是其他人已经完成的任务.它很可能是在Rails Core中,或者以gem或plugin形式存在.
您正在尝试做的事情已经完成,并且内置于Rails核心.它是一个名为collection_select的ActionView :: Helpers :: FormOpitionsHelper方法
collection_select完全符合您的要求,它比单一用途方法更强大.
它的形式是
collection_select(object, method, collection, value_method,
text_method, select_options = {}, html_options)
Run Code Online (Sandbox Code Playgroud)
将value_method和text_method发送到集合中的每个项目,以获取每个选择选项的选择值和显示文本.不要求列名都是必需的.
像这样使用它:
<% form_for @whatever do |form| %>
<%= form.collection_select :user_id, User.all, :id,
:full_name, :prompt => "Select a User" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1514 次 |
| 最近记录: |