2012-04-25 2 views
1

У меня есть две модели ActiveRecord. Idea и User. Существует связь между двумя работающими как User.idea.Обратная связь в Rails ActiveRecord

Модель пользователя в настоящий момент сохраняет lat и lng координаты от пользователя.

Из контроллера идей я хотел бы запросить все идеи, соответствующие определенному местоположению. Я не могу сделать этот запрос обратного соединения в Rails.

ответ

1

Я думаю, что вы хотите:

Idea.joins(:user).where(user: {lat: some_lat, lng: some_lng}).all 

some_lat/some_lng может быть диапазон. Рельсы будут обрабатывать магию.

+0

Если у вас есть точные координаты широты и долготы это может быть хорошим решением (хотя и редко, что это возможно, чтобы быть точным с поплавками/десятичного) –

+1

Он должен иметь возможность пройти диапазон: 'some_lat = 56.311018..56.711018'. И генерация их может быть выполнена с помощью метода. – klump

+1

Это выходит за рамки вопроса. 'some_lat' может быть диапазоном. Рельсы будут обрабатывать магию. – jdoe

0

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

# first about the near by: 
def close_to(position) 
    (position-0.2)..(position+0.2) 
end 

@users = User.where(:lat => close_to(some_lat), :lng => close_to(some_lng)).includes(:ideas) 

# if you need all the ideas: 
@ideas = [] 
@users.each do |user| 
    @ideas += user.ideas 
end 

В противном случае у вас есть в массиве пользователей все идеи, отсортированные пользователем. Или я пропустил ваш вопрос?

1

Во-первых: Как вы находите нужные места? Вероятно, вы могли бы использовать что-то вроде Geocoder (есть RailsCast about it).

Теперь я буду иметь подобную проблему в ближайшем будущем, но на данный момент я думал, что я, вероятно, сделать это в два этапа (двойной запрос):

@users = User.near(params[:location]).pluck(:id) 
@ideas = Ideas.where(:user_id => @users) 

Таким образом, вы получите идеи рядом (я использовал здесь метод Geocoder, но вы можете получить пользователей по-другому).

Примечание: Я предполагаю, что пользователь имеет много идей и идея принадлежит пользователю

+0

Вы можете просто указать рельсы для загрузки идей, принадлежащих пользователям, с помощью. .includes (: ideas) '. – klump