我不建议使用#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
这将使您的代码更加一致和可读。