如果列中存在值,则在视图上显示列名称 - Ruby on Rails

时间:2010-09-06 08:17:14

标签: ruby-on-rails config

我的公司模型中有列LTD。使用

从模型中检索值后

Company.find

如果LTD栏中有任何值,那么我必须在视图上显示文本“限制”。我在模型中有许多列是缩写形式的列,当值存在时,它们的长形式显示在视图上。因此,在视图上写条件是不可行的。

我在想是否编写包含应用程序常量的自定义rails配置文件。但我没有关于此的定量和定性信息。

请帮忙。提前谢谢。

2 个答案:

答案 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给你时间帮助我。