我想动态更改设计注册中的角色字段



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

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,这是免费提供的。

最新更新