0

我有两个关联模型,其中 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

也许这是一种可怕的气味?不笑太容易了。任何关于我的卫生的建议也很感激

4

1 回答 1

-1

I think it's easy enough to just do:

<%unless @clients.empty?%>
<%= f.label :which_client_does_this_belong_to? %>
<%= f.select(:client_id, @clients.collect{ |c| [c.name, c.id] }) %>
于 2013-04-25T22:37:56.673 回答