【问题标题】:ruby hash with database带有数据库的红宝石哈希
【发布时间】:2014-03-05 17:07:10
【问题描述】:

我正在尝试理解这行代码:

@rating = Rating.where(review_id: @review.id, user_id: @current_user.id).first

这行代码来自一个 Ruby on Rails 应用程序,该应用程序具有用户、评论和评级模型。以下是我目前的理解:

  • @rating 是一个变量
  • Rating.where().first 是一种方法
  • review_id:@review.id + user_id:@current_user.id 是参数-并且是隐式哈希键/值对

review_id: @review.iduser_id: @current_user.id 如何与数据库一起工作?

更新问题:对不起,我仍然很困惑。 @review.id@current_user.id 如何指向数据库中的任何内容?我的数据库中没有以 @ 符号开头的任何内容

【问题讨论】:

    标签: ruby-on-rails ruby database hash


    【解决方案1】:

    您有 2 个字段:"review_id""user_id" 在表 "ratings"

    符号@ - 表示它是实例变量,它不仅在控制器中可用

    变量结构示例:

    @current_user = {
      id: 1,
      name: "Jhon",
      last_name: "Wayne"
    }
    

    这意味着@current_user.id = 1

    user_id: @current_user.id
    

    并在表ratings字段user_id中查询搜索1

    【讨论】:

      【解决方案2】:

      如果你知道数据库 SQL 查询,那么

      Rating.where(review_id: @review.id, user_id: @current_user.id)
      

      等价于

      SELECT * from ratings where review_id = @review.id AND user_id = @current_user.id;
      
      1. @rating 不只是一个变量,它是一个实例变量
      2. Rating.where() 将返回一个评级数组。而 Rating.where().first 将返回数组的第一条记录

      【讨论】:

        【解决方案3】:

        Rating.where 提供ActiveRecord::Relation 对象,它知道review_iduser_id 的条件。当您为对象调用first 时,它会执行sql 查询,并附加LIMIT 1 条件。

        SELECT ratings.* FROM ratings WHERE ratings.review_id = 11 AND ratings.user_id = 12 LIMIT 1
        

        ORM 将来自数据库的响应转换为 ruby​​ 对象。您将其放在实例变量@rating 中,可能在控制器中。该变量将可在视图中访问。

        【讨论】:

          【解决方案4】:

          当您在 where 子句中提供哈希时,这意味着哈希的键是字段名称,该键的值是数据库中的值

          【讨论】:

            【解决方案5】:

            此行选择属于 ID 为 @review.id 的评论并属于当前登录的 ID 为 @current_user.id 的用户的所有评分。

            SQL 版本如下所示:

            query = "SELECT * FROM ratings WHERE review_id = #{@review.id} AND user_id = #{@current_user.id}"
            

            编辑:在散列中,每个键都指表中的列名,对应的值是您在该列中搜索的内容。该值由存储在实例变量中的内容给出。

            【讨论】:

              猜你喜欢
              • 2012-12-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-10-17
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多