Rails4 - 如何访问视图中的常量并正确显示它们?

时间:2014-11-14 12:52:07

标签: ruby-on-rails ruby-on-rails-4

我的用户模型中有以下常量

应用程序/模型/ user.rb

GENDER_TYPES = [['Male', false], ['Female', true]]
COUNTRY_TYPES = [["Afghanistan",1],["Aland Islands",2],["Albania",3]..]

在用户注册页面的视图中,我按如下方式访问它们

  <div>
  <%= f.label :is_female, "Gender" %>
  <%= f.select :is_female,  User::GENDER_TYPES , {}, { :class => 'form-control' } %>
  </div>

  <div>
  <%= f.label :country, "From" %>
  <%= f.select :country,  User::COUNTRY_TYPES , {}, { :class => 'form-control' } %>
  </div>   

这是我的用户模型的一部分

class AddAdminToUsers < ActiveRecord::Migration
  def change    

    add_column :users, :is_female, :boolean, default: false   
    add_column :users, :country, :integer

  end
end

当用户注册时,我可以将数据存储在表格中。 但是当我在视图中显示用户时,我使用的是性别

  <% if user.is_female %>
    <small>Female</small>
  <% else %>
    <small>Male</small>
  <% end %>

而且我不知道如何为国家做这件事。 我知道必须有更好的方法来做到这一点。

有人可以分享如何显示具有上述数据结构的用户的性别和国家?

2 个答案:

答案 0 :(得分:2)

假设您已经决定将数据保存在常量中,这里有一些提示:

  • 使用哈希值COUNTRIES = {1 => "Afghanistan"},您可以根据需要轻松将其转换为数组,并且您可以轻松地以两种方式查找值:
<% if user.country %>
  <%= User::COUNTRIES[user.country] %>
<% end %>
  • 使用帮助程序来呈现原始数据而不是直接引用模型常量,当您想要进行作为表示的一部分而不是业务逻辑的翻译时,它也很有用:
def coutries_for_select
  # assuming countries is a hash id => name
  User::COUNTRIES.map {|id, name| [name, id]}
end

答案 1 :(得分:1)

可能不完美,但会完成工作

<%= User::COUNTRY_TYPES.map(&:reverse).to_h[user.country] %>

最好将国家/地区保存在另一个表中,并将其引用。