Настройка канала с помощью Rails - PullRequest
1 голос
/ 25 октября 2010

У меня есть модель страны и модель мест - страна has_many мест и место belongs_to страны.Модель места также has_many сообщения (которые belong_to место).Я хотел бы объединить все сообщения из мест, принадлежащих определенной стране, в канал - скорее как канал активности друзей на сайте социальной сети.У меня возникли проблемы с поиском подходящего поиска, любая помощь будет высоко оценена!На данный момент у меня есть:

country.rb

has_many :places
has_many :posts, :through => :places

def country_feed
  Post.from_places_belonging_to(self)
end

post.rb

belongs_to :place
scope :from_places_belonging_to, lambda { |country| belonging_to(country) }

private

  def self.belonging_to(country)
    place_ids = %(SELECT place_id FROM places WHERE country_id = :country_id)
    where("place_id IN (#{place_ids})", { :country_id => country })
  end

end

Тогда в стране файл show.html.erb:

<h3>Posts</h3>

<% @country.country_feed.each do |post| %>
  <%= link_to "#{post.user.username}", profile_path(post.user_id) %> posted on <%=link_to "#{post.place.name}", place_path(post.place_id) %> <%= time_ago_in_words post.created_at %> ago:
  <%= simple_format post.content %>
<% end %>

Это работает без каких-либо ошибок, но дает поток всех сообщений, а не выбор сообщений для этой конкретной страны.Какой лучший способ заставить это работать?У меня есть скрытое подозрение, что я могу быть слишком сложным делом ... заранее спасибо!

1 Ответ

2 голосов
/ 26 октября 2010

Похоже, в подзапросе есть синтаксическая ошибка.places_id не существует в таблице places, поэтому на самом деле следует читать:

SELECT id FROM places WHERE country_id = :country_id

Можно подумать, что недопустимый подзапрос вызовет исключение, но это не так - или иначеэто обрабатывается молча.Очень странно.

Но если я что-то упустил, вы можете заменить все это просто используя:

<% @country.posts.each do |post| %>

Нет?

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