2015-04-23 3 views
0

Я новичок в Ruby on Rails, и у меня есть одна проблема с более сложными запросами базы данных. Я использую рельсы 4Расширенный запрос базы данных rails 4

У меня есть модель пользователя, каждый пользователь имеет одно местоположение в таблице местоположения.

Вторая таблица - пользовательские отношения. В пользовательской таблице есть поля user_id, friend_id и id друга. Пользователь имеет отношение к этой таблице следующим образом: у каждого пользователя много друзей и друзей.

class User 

    has_one :location, dependent: :destroy 
    has_many :user_friendships 
    has_many :friends, through: :user_friendships 

class user_friendship 

    belongs_to :user 
    belongs_to :friend, class_name: 'User', foreign_key: 'friend_id' 

Теперь я хотел бы, чтобы отобразить все дружеские отношения пользователей, которые имеют отношения с этим пользователем, но только те дружеские отношения, где друг обновила свое местоположение в последние 20 минут.

Так что я попытался

time = params[:timestamp] 
endtime = time.to_i - 1200 
friends = UserFriendship.where(user_id: <user.id>) 
updted = friends.include(:users).include(:location).where(updated_at: time..endtime) 

или это

friends = UserFriendship.where(user_id: <user.id>) 
    updted = friends.include(:users).include(:location).where("created_at <= :start_date AND created_at >= :end_date", 
{start_date: time, end_date: endtime}) 

, но я получаю эту ошибку: wrong argument type Symbol (expected Module), но проблема в том, что я даже не знаю, если это право.

Чего я хочу достичь, это найти все дружеские отношения с пользователем, но только те дружеские отношения, в которых друзья обновили свое местоположение за последние 20 минут.

ответ

2

У вас есть что-то вроде отношения user has one location, так?

Попадая друзей пользователя:

user.friends 

Попадая друзей, которые обновили свое местоположение в течение последних 20 минут:

user. 
friends. 
joins(:locations). 
where("#{Location.table_name}.updated_at >= ?", 20.minutes.ago) 
+0

Спасибо за вашу помощь, но ваш ответ показал мне, что я спросил мой вопрос неверно. Извините, я обновил свой вопрос. что я хотел знать. Как найти все пользовательские дружеские отношения в таблице user_friendships с друзьями, которые обновили свое местоположение за последние 20 минут. – Santar

Смежные вопросы