我有两个关联模型,其中 case_studies 属于_客户和客户有_许多案例研究。我的控制器有一个 before_filter 来查找 @clients 实例变量的所有客户端。
然后我有一个表单,允许用户选择 case_study 属于哪个客户。
使用 form_helper,我将 case_studies 模型限定为变量 f 和一些字段。
<div class='fields'>
<%= f.label :case_study_title -%>
<%= f.text_field :case_study_title -%>
<%= f.label :which_client_does_this_belong_to? -%>
<%= f.select(:client_id, @clients.collect{ |c| [c.name, c.id] }) -%>
</div>
这一切都很好,除非我的数据库中没有客户端。我知道这是因为@clients 是nil,它试图在nil 上执行一个collect 方法,这会爆炸。
Rails 的处理方法是什么?
我应该使用存在吗?零?还是空的?我应该在我的erb那里做这个还是应该把它放在一个帮手里?我应该做点别的吗?
编辑以显示控制器
我的控制器很简单。它有一些来自炼油厂的神秘黑魔法,我刚刚添加了一个前置过滤器
module Refinery
module CaseStudies
module Admin
class CaseStudiesController < ::Refinery::AdminController
before_filter :find_all_clients
crudify :'refinery/case_studies/case_study', :xhr_paging => true
protected
def find_all_clients
@clients = Refinery::Clients::Client.all
end
end
end
end
end
也许这是一种可怕的气味?不笑太容易了。任何关于我的卫生的建议也很感激