ruby on rails select form helper Null值验证

时间:2010-08-19 19:28:43

标签: ruby-on-rails

我有一个客户端表(带有字段id,名称)和一个项目表(带有字段id,name,client_id)。

我的项目模型是:

class Project < ActiveRecord::Base
  belongs_to :client
end

我需要在一个选择列表中显示客户名称和项目名称 在下面的代码中,一切运行良好,我在选择列表中获得了与项目名称连接的客户端名称(例如:IBM PROJECT_DEMO)

 select('hour','project_id',
        @projects.collect{ |project|
          [project.client.name+project.name,project.id]})

当我有一个没有客户端的项目时问题就开始了我收到了错误

undefined method `name' for nil:NilClass

我尝试插入if语句以检查客户端名称是否存在 像这样

select('hour','project_id',
       @projects.collect{ |project|
         [project.client.name if project.client+project.name,project.id]},
       {:prompt => 'Select Project'})

但它不起作用,我收到错误

如果有人能帮我解决这个问题,我将非常感激

由于

1 个答案:

答案 0 :(得分:1)

您应该进行验证,因此名称不能为零

validates_presence_of :name

或具有默认值,因此始终不是

change_column :projects, :name, :string, :default => "Sam"

但如果您只是想让它发挥作用,您可以这样做

select('hour','project_id', @projects.collect{|p|["#{p.client.name if !p.client.blank?}", p.id]})

如果名称为nil并不重要,因为你可以调用nil但是你不能调用nil.attribute,这就是为什么我的解决方案在第一轮没有工作的原因。