[英]Convert ActiveRecord statement into postgresql query- Rails 4/postgresql 9.4
如何将以下Active Record查询转换为原始postgresql?
我只想用'@available_deal = Deal where ...'转换行
应用程序/控制器/ deals_controller.rb
def show_deals_available
@deal = Deal.friendly.find params[:id] # no need to turn this into postgresql
@available_deal = Deal.where('deal_id = ? AND deal_status = ?',
@deal.id, "not_yet_taken").first
respond_to do |format|
format.js
end
end
编辑感谢反馈
我进入本地控制台,将查询复制/粘贴到文件中,然后用(@ deal.id)等变量替换了该数字
所以现在我有:
应用程序/控制器/ deals_controller.rb
def show_deals_available
@deal = Deal.friendly.find params[:id] # no need to turn this into postgresql
@available_deal = Deal.where('deal_id = ? AND deal_status = ?',
@deal.id, "not_yet_taken").first
@available_deal = SELECT "deals".* FROM "deals" WHERE (deal_id = @deal.id AND deal_status = 'not_yet_taken') ORDER BY "deals"."id" ASC LIMIT 1
respond_to do |format|
format.js
end
end
但我收到一个错误:
SyntaxError - syntax error, unexpected tCONSTANT, expecting keyword_end
...ROM "deals" WHERE (deal_id = @deal.id AND ...
... ^
/deals_controller.rb:70: syntax error, unexpected tCONSTANT, expecting ')'
..." WHERE (deal_id = @deal.id AND deal_status = ...
... ^
....
您可以在执行代码时仅看一下rails控制台。 在那里您应该找到一个看起来像这样的条目
SELECT * FROM deals WHERE deal_id = 1 AND deal_status = 'not_yet_taken'
这是SQL中的对应行。
编辑:
您似乎想在原始代码中注入原始SQL。 对于可以通过不同方式解决的问题,这被认为是不好的风格,因为在更新rails或更改数据库后端时,这可能会中断。 不过,如果您真的想走这条路,可以做些类似的事情
Deal.find_by_sql("SELECT \"deals\".* FROM \"deals\" WHERE (deal_id = #{@deal.id} AND click_win_throbber_status = 'not_yet_clicked') ORDER BY \"deals\".\"id\" ASC LIMIT 1"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.