在ActiveRord的Rails上创建了很多查询

时间:2017-02-15 03:04:46

标签: mysql ruby-on-rails ruby activerecord

我有文章模型和ArticleLike模型,用于记录用户喜欢的文章。

文章Like模型属于文章,定义如下

class ArticleLike < ApplicationRecord
  belongs_to :article
end

如果我使用ArticleLike.where(:article_id:XXX),ActiveRecord将发送原始查询,如

SELECT * FROM article WHERE article_id = XXX

可以避免ActiveRecord将此原始查询发送到我的数据库吗? 有时,我只需要选择一些不需要任何连接的字段,但如果我在模型中设置了belongs_to,则Activerecord总是加入(包括)表。

非常感谢。

2 个答案:

答案 0 :(得分:1)

是的,您可以使用selectpluck来减少列数(取决于您是想要多列还是只有一列)。

例如:

ArticleLike.where(:article_id: XXX).pluck(:id)
=> ['123', '456']
ArticleLike.where(:article_id: XXX).pluck(:id).to_sql
=> "SELECT id FROM article WHERE article_id = XXX"

ArticleLike.where(:article_id: XXX).select("column_1, column_2").to_sql
=> "SELECT column_1, column_2 FROM article WHERE article_id = XXX"

有关如何使用Active Record查询界面的更多详细信息,请访问: http://guides.rubyonrails.org/active_record_querying.html

答案 1 :(得分:-1)

我认为find_by_sql可以解决您想要获得的问题。