我正在浏览一个遗留代码库,我看到这样的东西:
def all_story_links
StoryLink.complete.where("
(storyable_type = 'Recipe' AND storyable_id = ?)
OR
(storyable_type = 'RecipeStep' AND storyable_id IN (?))
OR
(storyable_type = 'RecipeIngredient' AND storyable_id IN (?)
)", id, recipe_step_ids, recipe_ingredient_ids)
end
在where方法中叫什么?这是什么?是阿雷尔吗?这是否存在,因为没有 ActiveRecord 方便的方法可以解决此问题?是SQL还是Arel?有什么好资源可以快速学习 AREL 吗?
where 方法内部的内容大多是普通的旧 SQL,Rails 的附加功能在看到问号("?")的地方进行替换。Rails 替换问号,即在查询本身之后赋予 where 方法的值:id、recipe_step_ids...。
它不是阿雷尔。
在这种情况下可能使用了普通的旧SQL,因为使用ActiveRecord API很难或不可能实现AND和OR。