2015-09-26 72 views
1

如何将以下Active Record查询转换为原始postgresql?将ActiveRecord语句转换为postgresql查询 - Rails 4/postgresql 9.4

我只想行转换与 '@available_deal =应对那里......'

应用程序/控制器/ 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 = ... 
...        ^
.... 
+0

是的,将一块SQL粘贴到一堆Ruby代码中。没有什么可以出错,对吧? ;)你追求的最终目标是什么? –

+0

了解更多sql并直接在我的控制器内移动到原始sql – Mathieu

+0

我发现rails方法find_by_sql也许我可以试试这个,但它是像“真正的R Sql”还是它仍然是活动记录,这将比真正的原始SQL更少的脂肪。对不起菜鸟在这里。 – Mathieu

回答

2

你可以只只是看看,当你执行你的代码中轨控制台。在那里你应该找到一个看起来有点像

SELECT * FROM deals WHERE deal_id = 1 AND deal_status = 'not_yet_taken' 

这是SQL中的对应行。

编辑:

你似乎要注入原始的SQL在Ruby代码。对于可以以不同方式解决的事情,这被认为是不好的风格,因为当更新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" 
+0

笨我对不起,我一定很累 – Mathieu

+0

对不起,但它没有奏效。我复制粘贴控制台查询:我得到一个错误,请检查编辑我要写在一分钟 – Mathieu

+0

我知道这不是Railsy,但这个查询将发生在每秒10M行表或更多,所以试图优化它即使我需要离开Railsy的方式+如果改变dB,当然也是不利的。现在就试试你的答案。 – Mathieu

相关问题