Как добавить дополнительный текст для выбора метки в Ruby on Rails - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть 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 голосов
/ 28 сентября 2018

Определите метод в модели 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}) %>
0 голосов
/ 28 сентября 2018
<%= f.select(:task_id, Task.all.collect {|p| ["#{p.name} (ABC)", p.id]},  {prompt: "Select"}, {class: 'form-control', required: true}) %>
0 голосов
/ 28 сентября 2018

Для более организованного способа это можно сделать следующим образом: -

в контроллере -

@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, которая будет повторять каждый элемент массива, это может быть лучшим решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...