Rails 3.1 form_for отсутствующий метод

#ruby-on-rails-3.1

#ruby-on-rails-3.1

Вопрос:

Я работаю с моделью, которая, как я знаю, работает (записи существуют в базе данных, их можно искать и отображать в других представлениях и т. Д.), Но когда я пытаюсь использовать тег form_for для создания представления для редактирования одной из этих записей, я получаю сообщение об ошибке:

Показывает /var/www/caucus/app/views/registration_loader/checkIn.html.erb , где строка # 13 поднята:

 undefined method `voter_path' for #<#<Class:0x98cabdc>:0x98c8878>
 

Извлеченный источник (вокруг строки # 13):

 10: </div>
11: 
12: <%= form_for(
13:     @voter,
14:     { :controller => "registration_loader",
15:       :action     => "editVoter"
16:     } ) do |f| %>
 

@voter Ссылается на объект избирателя, полученный с помощью:

 #   Get the voter.
@voter = Voter.where( [ "voter_id = ?", @voterId ] )[ 0 ]
if not @voter
    flash[ :error ] = "NO VOTER!"
    redirect_to :action => 'search'
elsif not @voter.kind_of?( Voter )
    flash[ :error ] = "NO VOTER RECORD! (#{@voter.class.to_s})"
    redirect_to :action => 'search'
end
 

Когда я меняю значение @voter to :voter , оно перестает выдавать мне ошибку, но не заполняет поля в моем представлении данными для записи, которую я хочу отредактировать.

Согласно руководству Rails 3.1 API, передача объекта модели в form_for должен генерировать код, который позволяет мне редактировать данные в этом объекте, но, очевидно, отсутствует вспомогательный метод ( voter_path ). Где этот voter_path метод должен быть определен, и какова его правильная семантика и подпись? Нигде в документации создание такого метода не обсуждается, и я не могу найти примеров написания такого метода.

*_path Должен ли метод автоматически генерироваться? Если нет, может кто-нибудь указать мне на документацию, в которой указаны синтаксис и семантика этого метода?

Спасибо, Джон С.

Комментарии:

1. Как routes.rb выглядит ваш файл? Есть ли у вас там ресурс для ваших объектов избирателей?

2. Спасибо за ответ! (Черт возьми, этот интерфейс меня удивил!) Ваш ответ предполагает, что URL-адрес, который я создаю с использованием :controller и :action, в некотором роде неверен. У меня есть маршрут для этого URL: registration_loader_editVoter POST / registration_loader / editVoter(.:format) {:контроллер =>»registration_loader», :действие =>»editVoter»} . Имеет ли form_for значение по умолчанию для post?

3. Добавление ресурсов: избиратели работали частично, но я не могу понять почему, поскольку нет контроллера избирателей. Что Rails 3.1 делает с маршрутом к несуществующему контроллеру?

Ответ №1:

Короткий ответ: не используйте form_for, если вы также не разработали свой код для использования «ресурсоемких контроллеров». Вместо этого используйте form_tag. Добавление ресурсов: избирателей к маршрутам создает маршруты к несуществующему контроллеру.