如何在rails上的ruby视图中显示关联模型

时间:2011-07-14 23:43:01

标签: ruby-on-rails activerecord models

这可能是一个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 %>

现在,我没有在任何地方看到相关的模型城市。如何在我的视图中迭代连接到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 个答案:

答案 0 :(得分:1)

你必须通过城市协会。

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

但是,如果cities_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(', ') %>