#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. Добавление ресурсов: избирателей к маршрутам создает маршруты к несуществующему контроллеру.