0

2 つの問題があり、その理由がわかりません。http://ruby.railstutorial.org/chapters/のチュートリアルに従いました

Problem #1: My login and logout don't seem to be working
Problem #2: My private function doesn't see sign_in? -- I believe however is because sign_in? is declared in the sessionHelpers and I declared this function in the customerController which would explain why I can't see but don't know how to make it see.

ここに私が持っているコードがあります!モデル/customer.rb コントローラー/セッション

class SessionsController < ApplicationController
    def new
    end

    def create
        customer = Customer.find_by_email(params[:session][:email])
        if customer && customer.authenticate(params[:session][:password])
                # Sign the user in and redirect to the user's show page.
            sign_in customer
            redirect_back_or customer
        else
            flash.now[:error] = 'Invalid email/password combination'
            render 'new'
        end

    end

    def destroy
        sign_out
        redirect_to root_path
    end
end

コントローラー/顧客

class CustomersController < ApplicationController
    before_filter :signed_in_customer, only: [:edit, :update]
    before_filter :correct_customer,   only: [:edit, :update]

    def new
        @customer = Customer.new
    end

    def create
        @customer = Customer.new(params[:customer])
        if @customer.save
            sign_in @customer
            flash[:success] = "Welcome to Where you Where"
            redirect_to @customer
        else
            render 'new'
        end
    end

    def show
        @customer = Customer.find(params[:id])
    end

    def edit
        @customer = Customer.find(params[:id])
    end

    def update
        @customer = Customer.find(params[:id])
        if @customer.update_attributes(params[:customer])
            flash[:success] = "Profile updated"
            sign_in @customer
            redirect_to @customer
        else
            render 'edit'
        end
    end

    def index
        @customers = Customer.all
    end

    private
        def signed_in_customer
            unless signed_in?
                store_location
                redirect_to signin_path, notice: "Please sign in."
            end
        end

            def correct_customer
                @customer = Customer.find(params[:id])
                redirect_to(root_path) unless current_customer?(@customer)
            end
end

ヘルパー/セッション

module SessionsHelper
    def sign_in(customer)
        cookies.permanent[:remember_token] = customer.remember_token
        self.current_customer = customer
    end

    def sign_in?
        !current_customer.nil?
    end

    def current_customer=(customer)
        @current_customer = customer
    end

    def current_customer?(customer)
        customer = current_customer
    end

    def current_customer
        @current_customer ||= Customer.find_by_remember_token(cookies[:remember_token])
    end

    def sign_out
        self.current_customer = nil
        cookies.delete(:remember_me)
    end

    def redirect_back_or(default)
            redirect_to(session[:return_to] || default)
            session.delete(:return_to)
    end

    def store_location
            session[:return_to] = request.fullpath
    end
end

改めまして、誤字失礼いたしました

アップデート:

アプリケーションコントローラー

class ApplicationController < ActionController::Base
    protect_from_forgery
    before_filter :pages

    def pages
        @pages = Page.all
    end
    include SessionsHelper
end

ここで顧客を編集しようとしたときのエラー

undefined method `signed_in?' for #<CustomersController:0xb56089ec>
app/controllers/customers_controller.rb:45:in `signed_in_customer'

注:: db:reset を実行して、新しいアカウントを作成しました。成功しましたが、ヘッダーのリンクが表示され、ログアウトしています。

ここにヘッダーファイル

<header class="header">
  <div class="menu">
    <div class="center">
    <div class="logo">
          <nav>
        <ul>
        <% if sign_in? %>
            <div>Welcome <%= current_customer.full_name %> </div>
            <li><%= link_to "Home", root_path %></li>
            <li><%= link_to "Customers", customers_path %></li>
                <li><%= link_to "Profile", current_customer %></li>
                <li><%= link_to "Settings", edit_customer_path(current_customer) %></li>
                <li><%= link_to "Sign out", signout_path, method: "delete" %></li>
        <% else %>
            <li><%= link_to "Home", '#' %></li>
                <li><%= link_to "Sign in", '#' %></li>
        <% end %>
        </ul>
          </nav>
    </div>
    </div>
  </div>
</header>
4

1 に答える 1

0

ApplicationController にヘルパーが含まれていることを確認してください

class ApplicationController < ActionController::Base
  protect_from_forgery
  include SessionsHelper
end

これは、例の ApplicationController (CustomersController など) から継承するすべてのコントローラーが、ヘルパーのメソッドにアクセスできることを意味します。

私はあなたのすべてのコードを調べたわけではありませんが、これで両方の問題が解決するかどうかを教えてください。

于 2012-07-24T16:02:31.707 に答える