【问题标题】:Ruby Gem ActiveRecord find method with multiple conditions具有多个条件的 Ruby Gem ActiveRecord 查找方法
【发布时间】:2013-12-26 03:38:15
【问题描述】:

我正在使用三个数据库表构建一个 Sinatra 应用程序:userpostlike

我想运行一个查询,该查询将在 like 表中找到一个条目,如下所示:

FIND in like WHERE user_id == params[:user_id] AND post_id == params[:post_id]

(对于我将使用的一种条件:Like.find_by_user_id(params[:user_id])

我的问题是:

如何使用ActiveRecord Gem 运行具有多个条件的查找查询?

【问题讨论】:

    标签: ruby-on-rails ruby activerecord gem sinatra-activerecord


    【解决方案1】:

    使用where:

    Like.where('user_id = ? AND post_id = ?', params[:user_id], params[:post_id])
    

    Like.where('user_id = :user_id AND post_id = :post_id', params)
    

    重要的是要记住,需要将 where 的参数转换为预期的类型,例如 params[:post_id].to_i

    【讨论】:

      【解决方案2】:

      类似于find_by_user_iduser_id 列,您可以组合多个列名并获得动态查找器find_by_user_id_and_post_id

      Like.find_by_user_id_and_post_id(params[:user_id], params[:post_id])
      

      find_by_ finder 中有多个“可承受”列时,您可以使用where 并提供如下条件:

      Like.where(user_id: params[:user_id], post_id: params[:post_id])
      

      【讨论】:

        【解决方案3】:

        Like.find_by_user_id(params[:user_id]) - 此语法在 ActiveRecord 4 中已弃用。

        改为尝试使用 ActiveRecord 查询接口的where 方法,传递array conditions。示例:

        Like.where("user_id = ? AND post_id = ?", params[:user_id], params[:post_id])
        

        【讨论】:

          【解决方案4】:

          如果您希望得到一条记录:

          要替换find_by_whatever,您可以使用find_by(whatever),例如User.find_by(username:"UsernameIsMyUsername",password:"Mypassword")。如果您希望只有一条记录与您的搜索匹配,则应使用 find_by

          如果您期望结果不止一条记录:

          如果您期望不止一个,您应该使用wherewhere(username:"MyUsername",password:"Password")。这将返回一个数组中的所有结果记录。

          【讨论】:

            猜你喜欢
            • 2013-05-18
            • 2013-08-25
            • 2014-10-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-31
            • 1970-01-01
            相关资源
            最近更新 更多