我在select_field
上的格式如下:
<%= f.select(:task_id, Task.all.collect {|p| [p.name, p.id]}, {prompt: "Select"}, {class: 'form-control', required: true}) %>
生成的HTML是:
<select class="form-control" required="required" name="company[task_id]" id="company_task_id">
<option value="">Select</option>
<option value="3">Site Management</option>
<option value="1">Real Estate</option>
<option value="2">Meeting</option>
<option value="4">Training</option>
</select>
我想在标签上添加一些额外的文本,例如:
Site Management (ABC)
Real Estate (ABC)
Meeting (ABC)
Training (ABC)
如何添加(ABC)
?
答案 0 :(得分:2)
在Task
模型中定义一个方法,该方法将为您完成
#task.rb
def name_with_abc
"#{self.name}" + "(ABC)"
end
现在将select
更改为
<%= f.select(:task_id, Task.all.collect {|p| [p.name_with_abc, p.id]}, {prompt: "Select"}, {class: 'form-control', required: true}) %>
答案 1 :(得分:1)
以更有条理的方式可以完成以下操作:-
在控制器中-
@tasks_options = Task.distinct.pluck(<<-PLUCK, :id)
CONCAT_WS("", tasks.name, " (ABC)")
PLUCK
这将触发sql查询
SELECT CONCAT_WS("", tasks.name, "(ABC)"), `tasks`.`id` FROM `tasks`
可见
<%= f.select(:task_id, @tasks_options, {prompt: "Select"}, {class: 'form-control', required: true}) %>
因此,与其使用将循环访问数组每个元素的collect,还不如使用它。
答案 2 :(得分:0)
<%= f.select(:task_id, Task.all.collect {|p| ["#{p.name} (ABC)", p.id]}, {prompt: "Select"}, {class: 'form-control', required: true}) %>