繁体   English   中英

将ActiveRecord语句转换为Postgresql查询-Rails 4 / postgresql 9.4

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM