Ruby on rails 我如何在rails 3中进行自定义mySQL查询?

Ruby on rails 我如何在rails 3中进行自定义mySQL查询?,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,我正在尝试显示最近添加的来自用户发布的纹身的评论。因此,如果我发布了一个纹身,然后用户_b发布了“嘿,我喜欢你的纹身”,那么我只是想得到评论 首先,我使用acts_as_commentable_和线程gem,它不会为我试图加入的表创建外键。所以我的控制器不能查找纹身id,它必须查找可注释的id 在控制器中,我必须调用注释模型,然后向其中传递一些SQL内容,但显然我不知道如何将自定义SQL查询传递到ruby中,因为即使我的查询字符串在terminal中工作,在rails中使用它时,我也会得到各种各

我正在尝试显示最近添加的来自用户发布的纹身的评论。因此,如果我发布了一个纹身,然后用户_b发布了“嘿,我喜欢你的纹身”,那么我只是想得到评论

首先,我使用acts_as_commentable_和线程gem,它不会为我试图加入的表创建外键。所以我的控制器不能查找纹身id,它必须查找可注释的id

在控制器中,我必须调用注释模型,然后向其中传递一些SQL内容,但显然我不知道如何将自定义SQL查询传递到ruby中,因为即使我的查询字符串在terminal中工作,在rails中使用它时,我也会得到各种各样的废话

我基本上是想做到这一点:

SELECT comments.id FROM comments,tattoos WHERE commentable_id = tattoos.id AND 
tattoos.member_id = #{current_user}

其中#{current_user}将是传入的当前_用户。

您不必通过太多的障碍来完成此任务<代码>作为可注释的分配多态关联,因此您应该如下设置:

class Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :commentable, :polymorphic => true
end

class Tattoo < ActiveRecord::Base
  has_many :comments, :as => :commentable
end

class User
  has_many comments
end

有关多态关联如何工作的一般教程,请参见。恰巧这个railscast使用了:commentable作为多态性示例,因此如果您愿意,您应该能够直接遵循它。

我认为Ben的方法是最好的,但为了将来参考,如果您遇到更复杂的问题,您可以始终使用sql,例如:

Comment.find_by_sql("SELECT comments.* FROM comments,tattoos WHERE commentable_id = tattoos.id AND tattoos.member_id = ?", current_user)

不要使用
{current_user}
。请参阅。好的,acts_as_commentable使注释模型属于注释者(留下注释的用户),因此无法工作。但这对我来说确实澄清了Rails和SQL。谢谢好的,在works上充当可注释对象的方式是,注释模型属于您分配给它的任何对象,在本例中是用户。但是你可以指定一个单独的模型(或者如果你想的话,也可以指定相同的模型)作为可评论的模型,在我的例子中是一个纹身。作为可注释的,然后指定“可注释的id”列来引用已注释的内容,即纹身。对不起,以后我需要花时间校对我的问题和帖子
Comment.find_by_sql("SELECT comments.* FROM comments,tattoos WHERE commentable_id = tattoos.id AND tattoos.member_id = ?", current_user)