如何将子属性设置为collection_select值?

时间:2013-06-17 20:43:18

标签: ruby-on-rails select collections simple-form

我的表单包含以下标记:

<%= f.collection_select :employee_id, @employees, :id, :value, :prompt => true  %>

员工看起来像这样:

employee
  - attr1
  - attr2
  - user
     - firstname
     - lastname

我的问题:如何将lastname的{​​{1}}设置为选择字段中的值?我很确定这是可能的,但我认为我在语法上有一些差距。

2 个答案:

答案 0 :(得分:0)

你为什么这样做?

有可能,有:

<%= f.collection_select :employee_id, @employees, :last_name, :text_method, :prompt => true %>

其中:text_method是调用@employees成员的方法会返回您想要在下拉列表中显示的文字。

答案 1 :(得分:0)

你可能会问自己为什么我使用<%= f.select %>这是Ruby on Rails Api上的FormOptionHelper这与collection_select非常相似,但是它返回并标记了值的集合。而select为提供的对象和方法创建一系列包含的选项标签。所以说这个我相信你可以拥有以下内容:

<%= f.select(:employee_id, Employee.all.collect { |emp| [emp.lastname, user.id] }
             .sort{ |a, b| a[0] <=> b[0] }, {:prompt => "Select a Employee"}) %>

这将选择所有员工并按姓氏顺序对其进行排序。