Разработать бросок ArgumentError в рельсы 3.1 - PullRequest
4 голосов
/ 04 октября 2011

В приложении Rails 3.1 и обновленном Devise 1.4.7, когда я захожу на http://localhost:3000/users/sign_up (как указано в маршрутах рейка), я получаю " ArgumentError in Devise / registrations # new " извлеченный источникэто строка 3:

<%= form_for(resource_name, resource, :url => registration_path(resource_name)) do  |f| %>.

Какое решение для этого?Заранее спасибо.

Deals::Application.routes.draw do
  devise_for :users
  root :to => "home#index"
end

Ответы [ 3 ]

0 голосов
/ 12 октября 2011

Попробуйте это.

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
0 голосов
/ 14 октября 2011

Я могу подтвердить, что когда вы запустите rails generate devise:views и загляните внутрь рабочего шаблона по умолчанию, скопированного из гема в app / views / devise / registrations / new.html.erb , form_for вызывается Devise с аргументами:

form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f|

Если вы предпочитаете ссылку на копирование представлений драгоценного камня, посмотрите представления в репо.

Однако, если вы (или кто-то еще, читающий это) попытаетесь использовать форму регистрации со своим собственным контроллером, вполне возможно, что вам потребуется пересоздать некоторые из методов из устройства Devise.контроллер для того, чтобы получить форму для рендеринга .Предполагая, что вы позвонили своему классу пользователя User:

def resource_name
  :user
end

def resource
  @resource ||= User.new
end

def devise_mapping
  @devise_mapping ||= Devise.mappings[:user]
end
0 голосов
/ 09 октября 2011

У вас там слишком много аргументов.form_for нужен только один аргумент (ресурс), например:

@registration = Registration.new
form_for @registration

И при необходимости вы можете передать :url.

...