我真的陷入了困境。
我想要使用已过滤的选项填充select_tag
的RoR应用程序,请说Physicians
。这是我的select_tag
视图:
<%= select_tag "phyID",options_from_collection_for_select(@physicians,'id','fullNamePhy'),:include_blank => true %>
在控制器中我有
@physicians=User.find_by_userType('Physician')
但我收到错误:
undefined method `map' for #<User:0x3b09820>
似乎我必须使用User.all
而不是User.find
。请让我知道任何解决方法。提前致谢
答案 0 :(得分:2)
这应该有效:
@physicians = User.where(userType: 'Physician')
您收到错误是因为options_from_collection_for_select
期望对象的行为类似于Array
,例如ActiveRecord::Relation
个实例。但find_by_*
动态查找器返回表示单个记录的对象,在这种情况下为User
实例。
顺便说一句,Rails中的列名按惯例命名为下划线而不是驼峰,如user_type
。
答案 1 :(得分:1)
您可以使用动态find_all_by
查找程序
@physicians = User.find_all_by_userType('Physician')
find_by_column_names
返回单个记录。 select_tag
期望收集/记录数组