2011-03-25 134 views
1

我有一个模型“modela”,它与模型“submodelb”有has_many_through关系。在控制器中,我想检查modela是否有与之相关的子模型。我已经尝试了下面的两个代码示例;然而,如果modela没有任何子模型,两者都会抛出错误“未定义的方法子模型”。请帮我看看我做错了什么。Rails 3检查是否存在关联

样本1: if [email protected]
@submodelbs = @ modela.submodelbs
别的 @submodelbs = [] 端

样品2: 如果[email protected]
@submodelbs = @ modela.submodelbs
否则 @submodelbs = [] 结束

+0

未定义的方法'submodelbs'意味着'@ modela'可能没有 – 2011-03-25 17:40:30

回答

-4

为什么不把你的支票放在begin...rescue...end区块?

+0

我只想提一下,这是解决OP问题的绝对不适当的方法,任何阅读此内容的人都应该做类似于其他答案的事情。我为这样一个糟糕的解决方案表示歉意。 – mway 2014-06-24 06:13:27

0

我使用的空白?

unless @modela.submodelbs.blank? 
    #modela has submodelbs 
end 

但错误messege暗示你可能有一些错误的关联定义...

而且你要实现的目标可以用一个班轮

@modela.submodelbs ||= [] 

如果submodelbs完成将会分配nil空数组。

1

您可以使用.present?这是blank?

@submodelbs = @modela.submodelbs.present? ? @modela.submodelbs : [] 

相反的,但我觉得你的问题是,@modela可能nil或者您可能还没有在模型中正确定义的关联。

1

has_many_through生成的阅读器方法总是返回看起来像一个数组的东西,所以它永远不会返回nil。那么,你不能总是回到@modela.submodelbs吗?

+0

是啊..你是对的..如果没有相关记录,它会返回'[]'..我在回答时错过了... – rubyprince 2011-03-25 19:13:35