我有文章模型和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总是加入(包括)表。
非常感谢。
答案 0 :(得分:1)
是的,您可以使用select
或pluck
来减少列数(取决于您是想要多列还是只有一列)。
例如:
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可以解决您想要获得的问题。