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>