如何处理表单助手中的空实例变量?

时间:2013-04-25 21:32:34

标签: ruby-on-rails ruby-on-rails-3 refinerycms form-helpers

我有两个相关的模型,其中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上执行一个收集方法,这将会爆炸。

Rails的处理方法是什么?
我应该使用存在吗?零?还是空的?我应该在我的erb中做到这一点还是应该把它放在帮助器中?我应该做点什么吗?


编辑显示控制器

我的控制器非常简单。它有一些神秘的crudify黑魔法来自refinerycms,我只是添加了一个前过滤器

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
也许这是一种难闻的气味?很容易不被大声笑。任何关于我的卫生的建议也值得赞赏

1 个答案:

答案 0 :(得分:-1)

我认为这样做很容易:

<%unless @clients.empty?%>
<%= f.label :which_client_does_this_belong_to? %>
<%= f.select(:client_id, @clients.collect{ |c| [c.name, c.id] }) %>