Rails 3.1带有has_many&的未定义方法属于

时间:2012-01-21 17:55:07

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

我的Rails 3.1应用程序出现问题。我有两个控制器&模型,命名县/县和镇/镇。

县模型有has_many :towns,城镇模型有belongs_to :county

我正在尝试在Towns索引页面上显示县名,以便将标题显示为“-county-name中的城镇” - '。但是,当我提出%h1 Towns in #{@towns.county.name}时,我收到undefined method 'county'错误。

指数的城镇控制器是

def index
    @towns = Town.all
end

对于县控制员:

def index
    @counties = County.all
end

我的routes.rb

resources :counties, :path => "/locations" do
    resources :towns, :path => "/"
end

我做错了什么?

编辑:在我的城镇/索引视图中使用它,它会显示town.county.idtown.county.name

- @towns.each do |town|
  %tr
    %td= town.county.id
    %td= town.county.name
    %td= town.name
    %td= town.description
    %td= town.slug

2 个答案:

答案 0 :(得分:0)

@towns是......城镇的集合。不是一个单独的城镇。一组城镇没有县(根据您的模型),只有一个城镇有一个县。

如果你在城镇的索引页面并试图显示一个县的城镇,你不清楚你真正在做什么 - 你是否列出了每个城镇的县,并试图显示那个县的其他城镇?那将是town.county.towns(但您可能想要删除“当前”城镇)。

我不知道为什么你为counties控制器显示任何内容,因为你在towns页面上。如果你想要所有的县,那么这样做,但县控制器不参与。

答案 1 :(得分:0)

我与州和国家(对镇和县)有类似的问题。 对于您的城镇迁移,您是否有一个整数来引用该县(请参阅下面的 county_id

class CreateTowns < ActiveRecord::Migration
  def change
    create_table :towns do |t|
      t.string :name
      t.integer :county_id

      t.timestamps
    end
  end
end

然后在你的app / views / town / index.html.erb中你可以做一个County.find

 %tr
    %td= town.county.id
    %td= County.find(town.county_id).name
    %td= town.name
    %td= town.description
    %td= town.slug