0

我有两个模型:

class country < ActiveRecord::Base
  has_many :companies
end

class company < ActiveRecord::Base
  belongs_to :country
end

在我的公司视图索引中,我可以通过显示以下内容来显示公司所属的国家:

<%= company.country_id %>

这将向我显示与其关联的 ID 号,但我似乎无法解决如何将其解析回国家名称 country.name,我似乎尝试的所有操作都会崩溃,我认为我不会我以正确的方式解决问题?

4

2 回答 2

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

真的应该做你想做的。

按照建议的评论进行编辑。

于 2013-02-05T21:29:27.783 回答
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

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

于 2013-02-05T22:03:02.633 回答