collection_select不会在集合成员上调用第一个value_method

时间:2014-06-14 09:13:50

标签: ruby-on-rails

我有用户模型

class User < ActiveRecord::Base
  ROLES = %i[admin moderator author]
end

注册表单(最初由设计宝石生成):

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <!-- other fields -->
  <div>
    <%= f.label :role %><br />
    <%= f.collection_select(:role, User::ROLES, :to_s, :humanize) %>
  </div>

  <div><%= f.submit "Sign up" %></div>
<% end %>

当尝试渲染此表单时,我收到错误消息:

undefined method `humanize' for :admin:Symbol

为什么第一种方法:to_s没有被调用?

1 个答案:

答案 0 :(得分:3)

  

为什么第一种方法:to_s没有被调用?

它是value_method的{​​{1}},而不是collection_select。看看documentation

  

未定义的方法`人性化&#39; for:admin:Symbol

label_method仅针对humanize定义。试试这个:

string