繁体   English   中英

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

[英]Rails4 - How to access constants in a view and display them correctly?

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

应用程序/模型/ 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 %>

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

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

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

  • 使用哈希: 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 

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM