0

在我的用户模型中,我添加

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 %>

问题是 ROLES = Role.all.collect(&:name) 在我添加和编辑时没有更新。例如,我添加了新的角色用户,然后我必须重新启动服务器才能查看注册字段中角色的变化。如何在不重新启动服务器的情况下更新角色更改?

4

2 回答 2

1

使用类方法而不是常量:

def self.roles
  Role.all.collect(&:name)
end

当然,如果user有很多,这是免费提供的roles

于 2012-12-03T08:38:48.140 回答
1

嗯,简单的解决方案

<% 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)。

简而言之:不要使用常量:)

于 2012-12-03T09:37:57.470 回答