如何创建显示视图模型?

时间:2012-05-17 15:52:32

标签: ruby-on-rails

这样的模型:

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

View的代码如下:

<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的值。

必须有一些优雅的方法来做到这一点。但我不知道。希望你们能给我一些建议。谢谢!

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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>

这应该有效。