我正在尝试使用此site将SQL转换为Rails查询,但它说:
Scuttle parser error, check your SQL syntax.
我很抱歉,但我真的不知道怎么写SQL请求...所以我不知道我哪里错了... 顺便说一句,如果有人知道如何写这个作为铁路查询我会很高兴
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
也许请求错了...我的问题与我的older post有关 我被建议用查询对用户进行排序......
在此应用中,用户可以推荐meal
并订购meal
到order
。
我希望如果user
订购了meal
,他可以使用他购买的conversation
开始user
。
另外,购买了user
的{{1}}可以使用他购买的meal
开始conversation
。
所以在user
表中我有conversations
(抱歉它不在图纸上)。
答案 0 :(得分:0)
易于理解 - Active Record Guide
不确定,如果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 Helpers
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]))
)
)
您的语法
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 Helpers
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 - 我永远不会想到使用这个工具,看起来它适用于一个非常具体的集合,或者我使用它的信息太少了。