ROR:MySQL查询表达式

时间:2010-12-10 02:33:22

标签: mysql ruby-on-rails

我已经设置了Model,但我不知道如何在控制器中编写代码来获取以下SQL查询的结果。

 SELECT users.name, events.* FROM users, events WHERE users.id=events.uid

非常感谢。

我重命名events.uid - > events.user_id
并为它们设置模型,事件的属性是

  t.integer :user_id
  t.string :title
  t.datetime :hold_time
  t.string :place
  t.text :description

新错误是 undefined method title for #<User:0x3fb04d8>

很抱歉打扰你们..

3 个答案:

答案 0 :(得分:1)

假设您已经设置了associations,您应该可以这样做:

u = Users.find(:all, :include => :events, :conditions => "users.id == events.uid")

答案 1 :(得分:0)

我无法发表评论(不够代表),所以我发布了一个答案,但是:

"users.id == events.uid"

应该是:

"users.id = events.uid"

我不确定这会解决您的问题,但可能会。

如果您想查找所有用户和事件,可以这样做:

users = User.all
users.each do |user|
  = user.name
  user.events.each do |event|
    = event.name
  end
end

你的模型看起来像这样:

class User < ActiveRecord::Base
  has_many :events
end

class Event < ActiveRecord::Base
  belongs_to :user
end

我确信还有另一种方法可以使用event.uid,但我还没那么先进。

答案 2 :(得分:0)

您可以使用find_by_sql函数执行任意SQL,因此在您的情况下可以执行以下操作:

e = Event.find_by_sql( 'SELECT events.*, users.name as user_name from users, events where user.id = events.uid')

e现在包含具有匹配用户名的所有事件,您可以像访问任何其他属性一样访问用户名,例如puts e.user_name。当然,由于它是在SQL查询中生成的,因此无法更改用户名。

这种方法可能与DB不可知应用程序的Rails哲学不一致,但是我发现有时使用SQL更容易(也可能更快)而不是尝试使用ActiveRecord实现相同的功能。