ROR: выражение запроса MySQL - PullRequest
       1

ROR: выражение запроса MySQL

0 голосов
/ 10 декабря 2010

Я настроил модель, но я не знаю, как написать код в контроллере, чтобы получить результат следующего запроса 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 ]

1 голос
/ 10 декабря 2010

Предполагая, что вы настроили ассоциации , вы сможете сделать это так:

u = Users.find(:all, :include => :events, :conditions => "users.id == events.uid")
0 голосов
/ 10 декабря 2010

Вы можете использовать функцию 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.

Этот подход может не соответствовать философии Rails в отношении приложений, не зависящих от БД, однако я считаю, что иногда гораздо проще (и, возможно, быстрее) использовать SQL напрямую, чем пытаться достичь того же с ActiveRecord.

0 голосов
/ 10 декабря 2010

Я пока не могу комментировать (недостаточно реп.), Поэтому я отправляю ответ, но:

"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, но я еще не настолько продвинут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...