0

Railsのチュートリアルを開始しましたが、認証用のデバイスgemを使用して別のプロジェクトをセットアップしようとしています。基本的に私が欲しいのは、ホームページ、ユーザーが基本的にサインアップするためのフォームに記入できるページ、そして認証を行う安全なページを用意することです。

現在、サインアップページに移動すると問題が発生します。これが私が受け取っているエラーです:

NoMethodError in Signup#index

Showing /Users/tomcaflisch/Sites/project2/app/views/signup/_form.html.erb where line #1 raised:

undefined method `users_path' for #<#<Class:0x007fa734b3e510>:0x007fa734b3a910>

Extracted source (around line #1):

1: <%= form_for(@user) do |f| %>
2:  <% if @user.errors.any? %>
3:  <div id="errorExplanation">
4:      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this post from being saved: </h2>

signup_controller.rb:

class SignupController < ApplicationController

  def index
    @user = User.new
  end

  def new 
    @user = User.new

    respond_to do |format|
        format.html
    end
  end

end

user.rbモデル:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :username
end

../views/signup_form.html.erb:

<%= form_for(@user) do |f| %>
    <% if @user.errors.any? %>
    <div id="errorExplanation">
        <h2><%= pluralize(@user.errors.count, "error") %> prohibited this post from being saved: </h2>
        <ul>
            <% @user.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
            <% end %>
        </ul>
    </div>
    <% end %>

    <div class="field">
        <%= f.label :email %><br />
        <%= f.text_field :email %>
    </div>

    <div class="field">
        <%= f.label :username %><br />
        <%= f.text_field :username %>
    </div>

    <div class="field">
        <%= f.label :password %><br />
        <%= f.text_field :password %>
    </div>

    <div class="actions">
        <%= f.submit %>
    </div>
<% end %>

ルート.rb:

get "signup/index"
devise_for :users
get "index/index" 
root :to => 'index#index'

$ bundleexecrakeルート| grepユーザー:

    new_user_session GET    /users/sign_in(.:format)       {:action=>"new", :controller=>"devise/sessions"}
            user_session POST   /users/sign_in(.:format)       {:action=>"create", :controller=>"devise/sessions"}
    destroy_user_session DELETE /users/sign_out(.:format)      {:action=>"destroy", :controller=>"devise/sessions"}
           user_password POST   /users/password(.:format)      {:action=>"create", :controller=>"devise/passwords"}
       new_user_password GET    /users/password/new(.:format)  {:action=>"new", :controller=>"devise/passwords"}
      edit_user_password GET    /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"}
                         PUT    /users/password(.:format)      {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET    /users/cancel(.:format)        {:action=>"cancel", :controller=>"devise/registrations"}
       user_registration POST   /users(.:format)               {:action=>"create", :controller=>"devise/registrations"}
   new_user_registration GET    /users/sign_up(.:format)       {:action=>"new", :controller=>"devise/registrations"}
  edit_user_registration GET    /users/edit(.:format)          {:action=>"edit", :controller=>"devise/registrations"}
                         PUT    /users(.:format)               {:action=>"update", :controller=>"devise/registrations"}
                         DELETE /users(.:format)               {:action=>"destroy", :controller=>"devise/registrations"}
4

3 に答える 3

1

2つのことを混ぜ合わせているようです。deviseは独自のサインアップ/登録ページを提供し、独自のページも作成しました。

それが適切な場合もありますが、多くの場合、デフォルトのデバイスページで十分です。少なくとも最初から十分です。

独自のページを使用してdeviseを実装することから始めることをお勧めします。今のところ、サインインページとサインアップページはそのままにしておきます。デバイスページは宝石の中に隠されているため、表示されません。

それらをカスタマイズしたい場合は、次の手順に従って、プロジェクトにデバイスページを(haml形式で)インストールできます。

https://github.com/plataformatec/devise/wiki/How-To:-Create-Haml-and-Slim-Views

于 2012-05-10T02:53:58.963 に答える
0

それは探していSignup#indexます..それは探しているはずですSignupController#index

あなたが持っていたいあなたのroutes.rbで

root :to => 'signup#index'

また、undefined method users_pathユーザーを取得するためのルートが欠落しているかresources :users、routes.rbから欠落している可能性があります

新しいユーザーの場合は、次のようなものが必要ですform_for(User.new)UsersController#new

__

またはこのようにします

1)

あなたviews/users/new.html.erbが欲しい

<%= form_for(@user) do |f| %>
  <%= render 'fields', :f => f %>
  ....

とのようなものへのルートget '/signup', :to => 'users#new'link_to 'Signup', signup_path

2)

UsersControllerの場合、追加します

 def new
    @user = User.new
    ..
  end
于 2012-05-09T20:15:13.493 に答える
0

あなたはあなた自身のサインアップコントローラーを作成しているので、私はあなたがあなたのルートファイルを投稿するのが好きな場所にルートを考案することはないと信じています、そして私たちがあなたのルートをまっすぐにすることができるかどうか見てみましょう。

于 2012-05-09T20:11:38.617 に答える