我有两种模式:
class country < ActiveRecord::Base
has_many :companies
end
class company < ActiveRecord::Base
belongs_to :country
end
在我看来,公司索引我可以通过显示以下内容来显示公司所属的国家/地区:
<%= company.country_id %>
这将显示它与之关联的ID号,但我似乎无法解决如何将此问题解决回国家/地区名称,即country.name,我似乎尝试崩溃的所有内容,我不知道我认为我正在以正确的方式解决问题?
答案 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
这将使您的代码更加一致和可读。