组合查询后的未定义方法

时间:2012-08-13 21:07:51

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我的模特是:

class City < ActiveRecord::Base
  belongs_to :region
  has_many  :activities
  has_many  :restaurants
end


class Activity < ActiveRecord::Base
    belongs_to :city
end

在城市索引页面上,我想根据每个循环中的布尔值显示所有城市的活动和餐馆。

我的城市管制员:

def index 
@region = Region.find(params[:region_id])
@cities = @region.cities

@activities = @cities.activities.find_all_by_homepage_city(true)
@restaurants = @city.restaurants.find_all_by_homepage_city(true)
@activities_restaurants = @activities + @restaurants
end

查看城市索引页

- @activities_restaurants.each do |b|
              %li 
                =link_to b.name, polymorphic_path([@region, @city, b])

我收到错误消息“未定义的方法`活动'”我做错了什么?

2 个答案:

答案 0 :(得分:1)

此行会导致错误:

@activities = @cities.activities.find_all_by_homepage_city(true)

您无法调用@ cities.activities,而是执行以下操作:

通过与Region

的关联添加has_many
class Region < ActiveRecord::Base
  has_many :activities, :through => :cities
end
然后你就可以打电话了:

@activities = @region.activities.find_all_by_homepage_city(true)

答案 1 :(得分:0)

@city是否设置在其他地方?在这里的代码中没有看到它。

我会尝试简化您的代码。如果你将@activities_restaurants减少到@activities或@restaurants,而不是两者,它们是否有效?

这至少可以让你开始。