Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将SQL请求转换为Rails查询_Sql_Ruby On Rails_Postgresql - Fatal编程技术网

如何将SQL请求转换为Rails查询

如何将SQL请求转换为Rails查询,sql,ruby-on-rails,postgresql,Sql,Ruby On Rails,Postgresql,我正试图将SQL转换为Rails查询,但它说: Scuttle解析器错误,请检查SQL语法。 很抱歉,我真的不知道如何编写SQL请求。。。所以我不知道我错在哪里。。。 顺便说一句,如果有人知道如何将此作为rails查询编写,我将非常高兴 SELECT users.* FROM orders inner JOIN meals ON orders.meal_id == meals.id inner JOIN users ON users.id = meals.user_id WHERE orde

我正试图将SQL转换为Rails查询,但它说:

Scuttle解析器错误,请检查SQL语法。

很抱歉,我真的不知道如何编写SQL请求。。。所以我不知道我错在哪里。。。 顺便说一句,如果有人知道如何将此作为rails查询编写,我将非常高兴

SELECT users.*
FROM orders inner 
JOIN meals ON orders.meal_id == meals.id inner 
JOIN users ON users.id = meals.user_id
WHERE order.user_id = current_user.id
编辑 也许请求是错误的。。。我的问题与我的工作有关 有人建议我用一个查询对我的用户进行排序

在此应用程序中,用户可以通过
order
建议一顿
,并点一顿

我希望如果一个
用户
点了一顿
,他可以开始与他购买的
用户进行
对话

另外,购买了
膳食的
用户
可以与他购买的
用户开始
对话

因此,在
对话
表中,我有
订单id
(很抱歉,它不在图纸上)


易于理解-

不确定Scuttle是否使用连接或不使用别名解析查询

  • 我把它改成了旧的

    SELECT users.*
    FROM orders, meals, users
    where  orders.meal_id = meals.id  
    and users.id = meals.user_id
    and orders.user_id = current_user.id;
    
    它给了我

    User.select(User.arel_table[Arel.star]).where(
      Order.arel_table[:meal_id].eq(Meal.arel_table[:id]).and(
        User.arel_table[:id].eq(Meal.arel_table[:user_id]).and(
          Order.arel_table[:user_id].eq(CurrentUser.arel_table[:id])
        )
      )
    )
    
    使用Arel助手时
  • User.select(User[Arel.star]).where(
      Order[:meal_id].eq(Meal[:id]).and(
        User[:id].eq(Meal[:user_id]).and(Order[:user_id].eq(CurrentUser[:id]))
      )
    )
    
    Order.select(U[Arel.star]).where(O[:user_id].eq(CurrentUser[:id])).joins(
      Order.arel_table.join(Meal.arel_table).on(O[:meal_id].eq(M[:id])).join_sources
    ).joins(
      Order.arel_table.join(User.arel_table).on(U[:id].eq(M[:user_id])).join_sources
    )
    
  • 你的语法

    SELECT u.*
    FROM orders o 
    JOIN meals m ON o.meal_id = m.id  
    JOIN users u ON u.id = m.user_id
    WHERE o.user_id = current_user.id ;
    
    给予-

    Order.select(U.arel_table[Arel.star]).where(
       O.arel_table[:user_id].eq(CurrentUser.arel_table[:id])
     ).joins(
       Order.arel_table.join(Meal.arel_table).on(O.arel_table[:meal_id].eq(M.arel_table[:id])).join_sources
     ).joins(
       Order.arel_table.join(User.arel_table).on(U.arel_table[:id].eq(M.arel_table[:user_id])).join_sources
    )
    
    使用Arel助手时
  • User.select(User[Arel.star]).where(
      Order[:meal_id].eq(Meal[:id]).and(
        User[:id].eq(Meal[:user_id]).and(Order[:user_id].eq(CurrentUser[:id]))
      )
    )
    
    Order.select(U[Arel.star]).where(O[:user_id].eq(CurrentUser[:id])).joins(
      Order.arel_table.join(Meal.arel_table).on(O[:meal_id].eq(M[:id])).join_sources
    ).joins(
      Order.arel_table.join(User.arel_table).on(U[:id].eq(M[:user_id])).join_sources
    )
    

    ps-我永远不会想到使用这个工具,它看起来会为一个非常特定的集合工作,或者可能我使用它的信息太少

    为什么您要将
    内部
    写在
    join
    的另一行上?你打算把它当作化名吗?对于编译器来说,这可能不是问题,但是对于维护它的人来说,这是非常混乱的。有一个输入错误:它应该是
    where orders.user\u id=current\u user.id
    @Siyual这是因为这是我第一次尝试编写它…尝试以下方法:
    user.includes(:orders)。where(orders:{user\u id:current\u user.id})
    ;此外,这看起来像订单
    属于:user
    ,而user
    有许多:订单。如果是这样,您只需执行
    current\u user.orders
    即可使所有订单的
    user\u id
    等于
    current\u user.id
    @mark-尝试向表中添加别名,不知怎的,这对我很有效。但最终的结果是可怕的。但可能是正确的,那么这可能是这样的吗
    @users=User.select(User.all.where('order.dine\u id=,dine.id')&('User.id=,dine.User\u id')&('order.User\u id=,current\u User.id'))
    我接受了这个答案,因为它帮了我很多忙,但我还没有把它弄糊涂,但我想我已经走了!谢谢:)