【问题标题】:Rails 5 ActiveRecord QueryRails 5 ActiveRecord 查询
【发布时间】:2018-01-18 06:34:35
【问题描述】:

型号UserArticle

在文章模型关系中定义belongs_to :user。在用户模型关系中定义has_many :articles

当我触发下面的查询时,给出成功的结果

Article.select(:name, :id).where(user_id:"fb157fc-a9353453cb95", name:"first")

但是当我触发下面的查询时,它给出了一个错误

Article.select(:name, :id).where("user_id (?)","1bf4c2fc-35c37e15d4b5")

错误 ActiveRecord::StatementInvalid HINT: No function matches the given name and argument types. You might need to add explicit type casts.

但是当我触发下面的查询时,它也会报错

Article.select(:name, :id).where("articles.user_id (?)","1bf4c2fc-35c37e15d4b5")

错误 ActiveRecord::StatementInvalid

【问题讨论】:

    标签: ruby-on-rails postgresql ruby-on-rails-5


    【解决方案1】:

    我想您可能正在寻找IN 查询 所以它的语法是:-

    user_ids = [1bf4c2fc-35c37e15d4b5,2nd_user_id, 3rd_user_id]
    Article.select(:name, :id).where("user_id IN (?)",user_ids)
    

    它会像这样进行 sql-query

    SELECT "articles"."name","articles"."id"  FROM "articles" WHERE (user_id IN (1bf4c2fc-35c37e15d4b5,2nd_user_id, 3rd_user_id))
    

    如果您在 where 块中查找 user_id 的查询,则其语法为:-

    user_id = 1bf4c2fc-35c37e15d4b5
    Article.select(:name, :id).where("user_id = ?",user_id)
    

    它将像这样进行sql查询:-

    SELECT "articles"."name","articles"."id"  FROM "articles" WHERE (user_id =
     "1bf4c2fc-35c37e15d4b5")
    

    希望上面的这两个查询能让您在搜索多个 user_id 和一个 user_id 的 IN 之间明确区别。

    【讨论】:

      【解决方案2】:

      我相信这就是你要找的东西

      Article.select(:name, :id).where("user_id =?","1bf4c2fc-35c37e15d4b5")
      

      Active Record 将第一个参数作为条件字符串,任何其他参数都将替换其中的问号 (?)。

      【讨论】:

        【解决方案3】:

        你错过了=。试试:

        Article.select(:name, :id).where("user_id = (?)","1bf4c2fc-35c37e15d4b5")
        

        我原以为你会做更多类似的事情:

        User.find_by(id: "1bf4c2fc-35c37e15d4b5").articles.select(:name, :id)
        

        如果您不需要结果是包含 Article 实例集合的 ActiveRecord::Relation,您可以这样做:

        User.find_by(id: "1bf4c2fc-35c37e15d4b5").articles.pluck(:name, :id)
        

        这将为您提供arrays 中的array。我相信这会更快一些,因为您没有实例化 ActiveRecord 对象。但是,这一切都取决于您的需求。

        【讨论】:

          【解决方案4】:

          尝试以下哪些测试过

          @user_id = "fb157fc-a9353453cb95"
          @articles = Article.select(:name, :id).where('user_id IN (?)', @user_id)
          

          希望能帮到你

          【讨论】:

            猜你喜欢
            • 2015-12-21
            • 2023-03-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多