使用对象"名称"属性作为select标签的可见选项,但是传递了它的" id"到控制器

时间:2014-03-14 02:04:17

标签: ruby-on-rails

我有一个User对象,其格式如下:

User(id: integer, email: string, name: string, created_at: datetime, updated_at: datetime, school_id: integer)

我还有一个对象数组@schools,它们都具有属性nameid

对于新的用户视图,我想有一个下拉菜单,显示学校的名称(@school.name)。我希望此下拉菜单将相应的@school.id传递给Users'控制器将下拉菜单中所选学校的特定id与新用户school_id属性相匹配。

在我看来,我有

<%= f.label :school_id %>
<%= f.select :school_id, options_from_collection_for_select(@schools, "id", "name") %>

但是,每当我故意发出错误(例如密码为5个字符而不是验证指定的6个)时,我会收到undefined method 'map' for nil:NilClass错误。

1 个答案:

答案 0 :(得分:0)

对我来说,使用db表创建select的最可读方法是使用collection_select

<%= f.collection_select :school_id, @schools, :id, :name %>

如果您想使用select

<%= f.select :school_id, @schools.map { |school| [school.name, school.id] } %>