Rails has_many关系根据外键查找名称

时间:2013-02-05 21:27:31

标签: ruby-on-rails

我有两种模式:

class country < ActiveRecord::Base
  has_many :companies
end

class company < ActiveRecord::Base
  belongs_to :country
end

在我看来,公司索引我可以通过显示以下内容来显示公司所属的国家/地区:

<%= company.country_id %>

这将显示它与之关联的ID号,但我似乎无法解决如何将此问题解决回国家/地区名称,即country.name,我似乎尝试崩溃的所有内容,我不知道我认为我正在以正确的方式解决问题?

2 个答案:

答案 0 :(得分:1)

<%= company.country.try(:name) %>

真的应该做你想做的事。

编辑评论建议。

答案 1 :(得分:0)

我不建议使用#try。当你告诉Rails给你过滤的集合时,这要好得多,那就是控制器的用途。

在这种情况下你有

    class CompaniesController < ApplicationController
      def index
        @companies = Company.where('country_id IS NOT NULL') #if using the relational db
        # or @companies = Company.all.select { |company| company.country.present? }
      end
    end

并在您的视图中

    <% @companies.each do |company| %>
      <%= company.country.name %>
    <% end %>

<强>更新

更好的方法是在模型中为此类事物创建命名范围。

    class Company < ActiveRecord::Base
      #...
      scope :with_country, ->() { where('country_id IS NOT NULL') }  
    end

现在您可以更改控制器操作

   def index
     @companies = Company.with_country
   end

这将使您的代码更加一致和可读。