如何在Ruby on Rails中将其他文本推送到“选择”标签

时间:2018-09-28 04:35:10

标签: ruby-on-rails ruby

我在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)

3 个答案:

答案 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}) %>