2

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

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

Какой тип выпадающего списка выбрано ниже.

enter image description here

Как я говорю это, чтобы отобразить first_name и last_name пользователя?

Примечание:

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

ответ

5

Видимо, 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 

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

f.input :owner, 
    collection: task.list.collaborators, 
    label_method: :select_label, 
    value_method: :id 
+0

Хм, это близко. См. Здесь: http://b.gadoci.me/3K0N0o2Z0j02091t2h0Y – bgadoci

+0

Нет, вы правы. Я делал что-то глупое. Благодарю. – bgadoci

+0

Я добавил еще один вариант, который может быть более чистым и более многоразовым для вас – PinnyM

0

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

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

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

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