导轨 3.使用原始 SQL 或 Arel 编写 ActiveRecord 查询



我正在浏览一个遗留代码库,我看到这样的东西:

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。

相关内容

  • 没有找到相关文章

最新更新