有,当你想补充一点,涉及已在模型中定义的关系的where子句,你应该调用对象的特殊方式。选择器哪里有关系
一个例子是,我有一个形象,belongs_to的图像或的has_many(无论山石你的船)类别,我要选择没有任何关联的类别中的所有图像。
因此,对于一个简单的belongs_to的我还是说:
Image.where('category_id is null')
但有没有这样做,因为关系模型中的明确定义的更好的办法?
有,当你想补充一点,涉及已在模型中定义的关系的where子句,你应该调用对象的特殊方式。选择器哪里有关系
一个例子是,我有一个形象,belongs_to的图像或的has_many(无论山石你的船)类别,我要选择没有任何关联的类别中的所有图像。
因此,对于一个简单的belongs_to的我还是说:
Image.where('category_id is null')
但有没有这样做,因为关系模型中的明确定义的更好的办法?
你感觉不舒服的使用where
与string clause
?每次使用where
时我都有这种感觉。
你也可以做
Image.where(:category_id=>nil)
或使用动态finder方法
Image.find_all_by_category_id(nil)
或负载通过协会 @images = Category.find(some_cat_id).images
(这一个不工作对于无)
我认为他们都应该产生或多或少相同的SQL。
试试这个:
Image.find(:all, :conditions => 'category_id is null')
它不是,我觉得不舒服的使用字符串的条款,它只是模型都在那里所以它是有道理的,有引用关系本身,而不是诉诸引用数据库本身。它有种否定了模型的点 – Rumpleteaser 2012-03-01 08:39:56
对不起,我不好措辞。我不习惯使用“字符串”,因为我觉得应该不需要写任何查询。应该全部由模型的协会本身来完成。 – 2012-03-01 12:27:01