Неопределенный метод Rails 3.1 с has_many и own_to

У меня проблемы с моим приложением Rails 3.1. У меня есть два контроллера и модели, названные округами/округами и городами/городами.

Модель округа имеет has_many :towns, а модель города — belongs_to :county.

Я пытаюсь показать название округа на странице указателя городов, чтобы отобразить заголовок как «Города в -название округа-». Однако, когда я ставлю %h1 Towns in #{@towns.county.name}, я получаю ошибку undefined method 'county'.

Контроллер городов для индекса

def index
    @towns = Town.all
end

Для окружного контролера:

def index
    @counties = County.all
end

My routes.rb is

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

Что я делаю неправильно?

РЕДАКТИРОВАТЬ: Используя это в моем представлении городов/индекса, он показывает town.county.id и town.county.name:

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

person Community    schedule 21.01.2012    source источник


Ответы (2)


У меня была аналогичная проблема со штатами и странами (против городов и округов). Для переноса города у вас было целое число для ссылки на округ (см. 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

Затем в вашем приложении/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
person Michael Cruz    schedule 23.01.2012
comment
County.find исправил это для меня =] - person ; 24.01.2012

@towns — это набор... городов. Не отдельный город. У набора городов нет округа (согласно вашей модели), округ есть только у отдельного города.

Если вы находитесь на странице указателя городов и пытаетесь показать города в округе, неясно, что вы на самом деле делаете — вы перечисляете округ для каждого города и пытаетесь показать другие< /em> города в этом графстве? Это будет town.county.towns (но вы, вероятно, захотите удалить «текущий» город).

Я не знаю, почему вы показываете что-то для контроллера counties, ведь вы находитесь на странице towns. Если вы хотите получить также все округа, сделайте это, но контролер округа не участвует.

person Dave Newton    schedule 21.01.2012
comment
ОК, я пробовал Town.county.name и @town.county.name, но выдает одно и то же сообщение - person ; 21.01.2012
comment
Это для свадебного сайта. Я хочу показать округа, доступные в Великобритании, а затем в каждом округе я хочу показать города, доступные в этом округе :) Отображение городов для этого округа тоже не работает. - person ; 21.01.2012
comment
@deanpcmad Если вы хотите показать округа, что вы делаете в указателе городов? Похоже, вы говорите об индексе округов. - person Dave Newton; 21.01.2012
comment
@deanpcmad Вероятно, нет @town; если вы перебираете @towns, у вас может быть town. Town.county.name уже вышел. - person Dave Newton; 21.01.2012
comment
Я думаю, что есть небольшая путаница. На странице /locations показаны доступные округа. Затем, нажав на это место, например, /locations/hampshire, я хочу показать доступные города, а затем перейти к /locations/hampshire/southampton. Часть, на которой я застрял, пытаясь отобразить название округа на странице указателя городов, показывающей, какие города находятся в выбранном округе. Также у меня есть проблема, когда любое графство, которое я выбираю, показывает все города. Я предполагаю, что это может быть связано? - person ; 21.01.2012