0

私は2つのモデルを持っています:

class country < ActiveRecord::Base
  has_many :companies
end

class company < ActiveRecord::Base
  belongs_to :country
end

会社のビューインデックスでは、次のように表示することで、会社が属する国を表示できます。

<%= company.country_id %>

これにより、関連付けられているID番号が表示されますが、これを国名であるcountry.nameに戻す方法がわからないようです。試したように見えるものはすべて、レールをクラッシュさせます。 m問題に正しい方法でアプローチしていますか?

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 に答える