我正在構建包含分層管理權限的博客。當我使用我們的種子管理帳戶登錄時,我可以看到索引很好。當我轉到未登錄的頁面時,應該按before_action
過濾的內容在我的索引視圖中出現錯誤,提示未定義的方法「admin ='爲nil:NilClass。未定義的方法僅在未登錄時
當我沒有登錄時,current_user應該爲零,並且視圖中的if語句應該解析爲false。以下代碼片段供參考。
這裏的觀點:
<div id="blog">
<%= render 'blogs/blog_header' %>
<div class="messages">
<%= render 'layouts/flash_messages' %>
</div>
<%= will_paginate @bloggers %>
<% @bloggers.each do |blogger| %>
<div class="post_wrapper">
<h2 class="title"><%= blogger.name %></h2>
<p class="date_and_author" style="display:inline"><%= blogger.email %></p>
<% if current_blogger.admin = 1 %>
<p class="date_and_author" style="display:inline">||</p>
<button class="button" style="display:inline"><%= link_to "delete", blogger, method: :delete,
data: { confirm: "You sure?" } %></button>
<% end %>
</div>
<% end %>
<%= will_paginate %>
控制器:
class BloggersController < ApplicationController
before_action :signed_in_blogger, only: [:show, :edit, :update, :destroy]
# GET /bloggers
# GET /bloggers.json
def index
@bloggers = Blogger.paginate(page: params[:page], per_page: 20)
end
# GET /bloggers/1
# GET /bloggers/1.json
def show
@blogger = Blogger.find(params[:id])
end
# GET /bloggers/new
def new
@blogger = Blogger.new
end
# GET /bloggers/1/edit
def edit
end
# POST /bloggers
# POST /bloggers.json
def create
@blogger = Blogger.new(blogger_params)
if @blogger.save
blog_sign_in @Blogger
flash.now[:success] = "New account successfully created."
redirect_to "/blogs"
else
render 'new'
end
end
# PATCH/PUT /bloggers/1
# PATCH/PUT /bloggers/1.json
def update
respond_to do |format|
if @blogger.update(blogger_params)
format.html { redirect_to @blogger, notice: 'User was successfully updated.' }
format.json { render :show, status: :ok, location: @blogger }
else
format.html { render :edit }
format.json { render json: @blogger.errors, status: :unprocessable_entity }
end
end
end
# DELETE /bloggers/1
# DELETE /bloggers/1.json
def destroy
Blogger.find(params[:id]).destroy
respond_to do |format|
format.html { redirect_to bloggers_url, notice: 'User was successfully destroyed.' }
format.json { head :no_content }
end
end
private
def blogger_params
params.require(:blogger).permit(:name, :email, :password, :admin, :password_confirmation)
end
# Confirms a signed-in user
def signed_in_blogger
unless blog_signed_in?
flash[:error] = "Please sign in."
redirect_to blog_signin_path
end
end
end
和輔助:
# Logs in the given blogger
def blog_sign_in(blogger)
session[:blogger_id] = blogger.id
end
# Returns the current logged-in blogger (if any)
def current_blogger
@current_blogger ||= Blogger.find_by(id: session[:blogger_id])
end
# Returns true if the blogger is logged in, false otherwise.
def blog_signed_in?
!current_blogger.nil?
end
def blog_sign_out
session[:blogger_id] = nil
@current_blogger = nil
end
難道這是有點關係到一個單獨的錯誤WH當創建一個新的博客時,在創建後,我得到「未定義的方法ID爲nil:Class?」任何幫助將不勝感激。每個請求
粘貼博客模式:
class Blogger < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation, :admin, :remember_token
has_secure_password
before_save { self.email = email.downcase }
before_create :create_remember_token
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: true
validates :password, length: { minimum: 5 }
validates :password_confirmation, presence: true
def Blogger.new_remember_token
SecureRandom.urlsafe_base64
end
def Blogger.digest(token)
Digest::SHA1.hexdigest(token.to_s)
end
private
def create_remember_token
self.remember_token = Blogger.digest(Blogger.new_remember_token)
end
end
首先是錯誤的。你將它分配給值1,如果應該像這樣檢查值'如果current_blogger.admin == 1' – Cyzanfar
是的,你是對的,拍攝。修正了它,但這並沒有解決問題。仍然得到相同的錯誤。 – Jeastburn
未定義的方法ID? – Cyzanfar