2011-07-14 33 views
0

这可能是一个n00b问题。我有CitiesUser型号:如何在rails上的ruby中显示相关模型

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

你必须经过城市协会。

<%= @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(', ') %> 
+0

感谢,第一行就是我一直在寻找!作为一个说明,表cities_users有日期,名称和DESCR所以 –

+0

在这种情况下它'不是标准的habtm,我d使用'has_many:through'继续使用,仍然使用AR关联而不是查询cities_users表。 –