这可能是一个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中?
答案 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(', ') %>