我的公司模型中有列LTD。使用
从模型中检索值后Company.find
如果LTD栏中有任何值,那么我必须在视图上显示文本“限制”。我在模型中有许多列是缩写形式的列,当值存在时,它们的长形式显示在视图上。因此,在视图上写条件是不可行的。
我在想是否编写包含应用程序常量的自定义rails配置文件。但我没有关于此的定量和定性信息。
请帮忙。提前谢谢。
答案 0 :(得分:1)
您可以创建一个单独的Abbreviation
模型,通过联接模型Company
可以将CompanyAbbreviation
模型与之关联。然后,特定公司记录中的每列将有一个连接表记录。您可以在company_abbreviations表中使用辅助密钥来引用关联的公司和缩写记录,而不是将每个缩写作为公司表中的列。
如下所示:
class Company < ActiveRecord::Base
has_many :company_abbreviations
has_many :abbreviations, :through => :company_abbreviations
end
class Abbreviation < ActiveRecord::Base
has_many :company_abbreviations
end
class CompanyAbbreviation < ActiveRecord::Base
belongs_to :company
belongs_to :abbreviation
end
class CreateAbbreviations < ActiveRecord::Migration
def self.up
create_table :abbreviations do |t|
t.string :abbr
t.string :description
end
add_index :abbreviations, :abbr
end
end
class CreateCompanyAbbreviations < ActiveRecord::Migration
def self.up
create_table :company_abbreviations do |t|
t.references :company
t.references :abbreviation
end
add_index :company_abbreviations, :company_id
add_index :company_abbreviations, :abbreviation_id
end
end
在db/seeds.db
中,您可以预先填充abbreviations
表。
您可以添加以下新关联:
@company.company_abbreviations.create(:abbreviation => Abbreviation.find_by_abbr("LTD"))
在您的视图中,您可以像这样干净地引用扩展的缩写列:
<% @company.abbreviations.each do |abbr| %>
<%= abbr.description %>
<% end %>
您可能还想以某种方式控制显示顺序,例如连接表中的排序列,
答案 1 :(得分:0)
这完全适合我。
我在config/environment.rb
中声明了一个全局哈希,它维护了所有列名称短格式和长格式的列表,在视图中我只检查列中是否存在值我搜索相应的来自全局哈希的键值对并显示长格式。
感谢guyz给你时间帮助我。