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 に答える