best_in_place:集合

时间:2012-04-03 03:41:36

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 best-in-place

我在Rails(3.1)应用程序的Ruby(1.9.3)中使用以下视图代码来编辑任务所属的人。

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

产生以下选择下拉列表。

enter image description here

如何告诉它显示用户的first_namelast_name

注意:

任务属于属于协作的列表。

2 个答案:

答案 0 :(得分:5)

显然,task.list.collaborators需要以[[key,value],[key,value]]的嵌套数组形式出现。一种简单的方法:

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

答案 1 :(得分: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] }