Ruby on rails 将ActiveRecord语句转换为postgresql查询-Rails 4/postgresql 9.4
如何将以下活动记录查询转换为原始postgresql 我只想转换带有“@available\u deal=deal where…”的行 app/controllers/deals\u controller.rbRuby on rails 将ActiveRecord语句转换为postgresql查询-Rails 4/postgresql 9.4,ruby-on-rails,postgresql,ruby-on-rails-4,activerecord,Ruby On Rails,Postgresql,Ruby On Rails 4,Activerecord,如何将以下活动记录查询转换为原始postgresql 我只想转换带有“@available\u deal=deal where…”的行 app/controllers/deals\u controller.rb def show_deals_available @deal = Deal.friendly.find params[:id] # no need to turn this into postgresql @available_deal = Deal.where('dea
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
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
编辑感谢反馈
我在本地控制台上复制/粘贴了我的文件中的查询,并用我的变量(@deal.id)替换了这个数字
所以现在我有:
app/controllers/deals\u 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
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 deal\u id=1,deal\u status='not\u happed'
这是SQL中的对应行
编辑:
您似乎想在ruby代码中注入原始SQL。对于可以以不同方式解决的问题,这被认为是不好的风格,因为在更新rails或更改DB后端时,这可能会中断。尽管如此,如果你真的想走这条路,你可以这样做
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"
对不起,我一定很累了。对不起,它不起作用。我复制粘贴了控制台查询:我得到一个错误,请检查我将在几分钟内编写的编辑。我知道这不是Railsy,但此查询将在10M行或更大的表上每秒发生一次,因此尝试对其进行优化,即使我需要离开Railsy way+如果数据库发生更改,则会出现缺陷。我现在就试试你的答案。你可能应该研究索引的主题,而不是通过这些方法来优化它。是的,把一段SQL粘贴到一堆Ruby代码中。没有什么会出错的,对吗?;)您的最终目标是什么?了解更多sql并直接在我的控制器中使用原始sql I find rails方法find_by_sql也许我可以尝试一下,但它是否像“real ra sql”或它仍然是活动记录,这将比真正的原始sql少一些脂肪。抱歉,这里是新手。实际上,不鼓励在Rails中使用普通SQL。它往往更长,风险更高,维护性更低。