在我的用户模型中,我添加了
ROLES = Role.all.collect(&:name)
在我看来,注册的一部分
<% if can? :manage, @users %>
<p><%= f.label :role %>: <%= f.collection_select :role, User::ROLES, :to_s, :humanize, {:include_blank => true} %></p>
<% end %>
问题是角色 = 角色.all.collect(&:name) 在我添加和编辑时没有更新。例如,我添加新的角色用户,然后我必须重新启动服务器才能在注册字段中查看角色的更改。如何在不重新启动服务器的情况下更新角色更改?
嗯,简单的解决方案
<% if can? :manage, @users %>
<p><%= f.label :role %>: <%= f.collection_select :role, Role.all.map(&:name), :to_s, :humanize, {:include_blank => true} %></p>
<% end %>
您也可以将其放在帮助程序中,或让控制器处理角色的检索(例如,设置实例变量@roles
)。
简而言之:不要使用常量:)
使用类方法而不是常量:
def self.roles
Role.all.collect(&:name)
end
当然,如果user
有很多roles
,这是免费提供的。