как отобразить связанные модели в представлениях в ruby ​​на рельсах - PullRequest
0 голосов
/ 15 июля 2011

Это, вероятно, вопрос n00b. У меня есть модель CitiesUser:

class CitiesUser < ActiveRecord::Base { belongs_to :city belongs_to :user }

В контроллере я делаю это:

def index { @cities_users = CitiesUser.find(:all, :conditions => { :user_id => session[:user][:id] }, :include => [:city])

и в представлении это:

<%= @cities_users.inspect %>

Теперь я нигде не вижу связанной модели City. Как мне повторить просмотр городов, привязанных к CitiesUser?

Мой WEBRick говорит:

CitiesUser Load (0.6ms) SELECT "cities_users".* FROM "cities_users" WHERE "cities_users"."user_id" = 1

City Load (0.8ms) SELECT "cities".* FROM "cities" WHERE ("cities"."id" IN (5,3))

Итак, ассоциация загружается, верно? В какой переменной он хранится или как поместить его в мой CitiesUser?

1 Ответ

1 голос
/ 15 июля 2011

Вам нужно пройти через городскую ассоциацию.

<%= @cities_users.map{ |cu| cu.city.name }.sort.join(', ') %>

Однако, если таблица towns_user в основном [: user_id,: city_id], то вам вообще не нужна модель CitiesUser. Вместо этого ваши модели должны выглядеть так:

class City < ActiveRecord::Base
  has_and_belongs_to_many :users
end

class User < ActiveRecord::Base
  has_and_belongs_to_many :cities
  ...
end

В вашем контроллере, просто убедитесь, что у вас есть запись пользователя (многие схемы авторизации делают это доступным с помощью метода current_user:

@user = current_user
@user ||= User.find session[:user][:id]

Тогда по вашему мнению:

<%= @user.cities.map { |c| c.name }.sort.join(', ') %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...