我有一个客户端表(带有字段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'})
但它不起作用,我收到错误
如果有人能帮我解决这个问题,我将非常感激
由于
答案 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
,这就是为什么我的解决方案在第一轮没有工作的原因。