col*_*rco 16 activerecord ruby-on-rails
我有一个不是特定于表的SQL查询,我不知道如何使用Ruby On Rails处理它.
这是我的SQL查询(你不需要理解它):
SELECT type, actor_id, events.created_at, photo_id, photos.user_id FROM (SELECT 'comment' AS type, user_id AS actor_id, created_at, photo_id FROM comments UNION SELECT 'classification' AS type, user_id AS actor_id, created_at, photo_id FROM classifications) AS events INNER JOIN photos ON photo_id = photos.id WHERE user_id = #{@user.id} ORDER BY created_at DESC LIMIT 9
我试图创建一个模型并使用find_by_sql:
class RecentActivity ActiveRecord::Base
attr_accessor :type, :actor_id, :created_at, :photo_id, :user_id
end
Run Code Online (Sandbox Code Playgroud)
我明白了:
Mysql::Error: Table 'mysite_development.recent_activities' doesn't exist: SHOW FIELDS FROM `recent_activities`
我该如何避免这条消息?有没有替代解决方案?
jdl*_*jdl 36
您可以直接从ActiveRecord :: Base获取数据库连接,但它没有扩展AR :: Base那么有用,因为有用的方法(如sanitize_sql)受到保护.
class ComplexQueries < ActiveRecord::Base
def self.my_query
# Notice how you can, and should, still sanitize params here.
self.connection.execute(sanitize_sql(["select * from foo limit ?", 10]))
end
end
results = ComplexQueries.my_query
results.each_hash{|h| puts h.inspect}
Run Code Online (Sandbox Code Playgroud)
您还可以获取ActiveRecord连接并调用select_all:
ActiveRecord::Base.connection.select_all('select * from foo').each do |e|
puts e.inspect
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11423 次 |
最近记录: |