1

このようなモデル:

create_table "user_accounts", :force => true do |t|
  t.string   "code"
  t.string   "user_name"
  t.integer  "user_type",  :default => 1
end

次のようなコントローラーのコード:

def index
  @user_accounts = UserAccount.all

  respond_to do |format|
    format.html # index.html.erb
    format.json { render :json => @user_accounts }
    format.xml { render :xml => @user_accounts }
  end
end

ビューのコードは次のようになります。

<table>
  <tr>
    <th><%= t :code %></th>
    <th><%= t :user_name %></th>
    <th><%= t :user_type %></th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @user_accounts.each do |user_account| %>
  <tr class="<%= cycle('list_line_odd', 'list_line_even') %>">
    <td><%= user_account.code %></td>
    <td><%= user_account.user_name %></td>
    <td><%= user_account.user_type %></td>
    <td><%= link_to 'Show', user_account %></td>
    <td><%= link_to 'Edit', edit_user_account_path(user_account) %></td>
    <td><%= link_to 'Destroy', user_account, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>

すべて正常に動作します。ただし、「user_type」が数値として表示されるという欠陥があります。しかし、「通常のユーザー」や「システム管理者」のような文字列として表示できることを願っています。

ビュー(index.html.erb)にロジックを追加したくない最も重要なこと。

だから私が必要とするのは、コントローラーまたはどこでも user_type の値を変更することです。

それを行うエレガントな方法がいくつかあるはずです。しかし、私にはわかりません。皆さんが私にいくつかの提案をしてくれることを願っています。ありがとう!

4

2 に答える 2

4

モデル UserAccount に次のような関数を追加できます

def user_type_string
    case self.user_type
    when 1
       return "Super user"
    when 2
       return "Something else"
    else
    end
end

そして、ビューで使用できるこのメソッド

<td><%= user_account.user_type_string %></td>
于 2012-05-17T16:14:05.817 に答える
0

まず、数値として定義します。

 t.integer  "user_type",  :default => 1

したがって、表示する文字列として定義するか、それを変換するロジックを用意する必要があります。

/app/helpers/user_accounts_helper.rb次のようなファイルを作成することをお勧めします。

module UserAccountsHelper

  def account_type_display(account_type)
    // put logic here to convert the integer value to the string you want to display
  end

end

次に、アカウントの種類を示すビュー ファイルの行を次のように変更します。

   <td><%= account_type_display(user_account.user_type) %></td>

それはうまくいくはずです。

于 2012-05-17T16:14:00.363 に答える