2013-02-05 52 views
0

名字我有兩個型號:導軌的has_many關係查找基於外鍵

class country < ActiveRecord::Base 
    has_many :companies 
end 

class company < ActiveRecord::Base 
    belongs_to :country 
end 

在我的公司視圖索引我可以顯示該公司通過顯示下列屬於哪個國家:

<%= company.country_id %> 

這會告訴我它與相關的身份證號碼,但我似乎無法工作,如何解決這一回是country.name國名,一切我似乎嘗試崩潰的軌道,我不認爲我以正確的方式接近問題?

回答

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

真的應該做你想做的。

編輯爲評論建議。

+1

插入該代碼嘗試以保持沉默,如果一個公司沒有與相關國家(不產生錯誤):'<%= company.country.try(:名稱)%>' – MrYoshiji

+0

完美的感謝兩個! – calabi

+0

可能是你應該把'@company = Company.includes(:國家).find(PARAMS [:編號])'在控制器動作。在控制器中而不是在視圖中使用這些查詢/關聯相關的東西是一種很好的做法。 –

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 %> 

更新:

更妙的aproach是建立在你的模型命名爲範圍這樣的事情。

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

現在你可以改變你的控制器動作

def index 
    @companies = Company.with_country 
    end 

這會讓你的代碼更一致和易讀。