best_in_place: коллекция - PullRequest
       14

best_in_place: коллекция

2 голосов
/ 03 апреля 2012

Я использую следующий код представления в своем приложении Ruby (1.9.3) на Rails (3.1) для редактирования того, кому принадлежит задача.

=simple_form_for task do |f|
  =f.input :owner, collection: task.list.collaborators

Который производит следующий выпадающий список.

enter image description here

Как мне настроить отображение first_name и last_name пользователя?

Примечание:

Задачи принадлежат спискам, которые принадлежат коллаборациям.

Ответы [ 2 ]

5 голосов
/ 03 апреля 2012

Очевидно, task.list.collaborators должен быть в форме вложенного массива как [[ключ, значение], [ключ, значение]].Простой способ сделать это:

task.list.collaborators.map{|user| [user.id, "#{user.first_name} #{user.last_name}"]}

В качестве альтернативы, вы можете сделать следующее.Добавьте метод для пользователя так, как вы хотите, чтобы он отображался:

class User
  def select_label
    "#{user.first_name} #{user.last_name}"
  end
end

Затем используйте параметры: label_method и: value_method:

f.input :owner, 
  collection: task.list.collaborators, 
  label_method: :select_label, 
  value_method: :id
0 голосов
/ 09 июня 2015

Вы также можете определить метод #to_s для User

class User
  def to_s
    "#{user.first_name} #{user.last_name}"
  end
end

Таким образом, ваша коллекция может быть:

task.list.collaborators.map { |user| [user.id, user] }
...