我想對我的帖子的觀點僅顯示admin用戶按鈕,但我得到這個錯誤:如何使用來自不同表的方法在Ruby on Rails的
undefined method `admin?' for nil:NilClass
提取的源:
<% if current_user.admin? && !current_user?(user) %>
<%= link_to "Edit", edit_post_path(@post), class: "btn btn-warning" %>
<%= link_to "Delete", post_path(@post),
method: :delete,
data: {confirm: "Are you sure you want to delete this blog post?"},
class: "btn btn-danger" %>
<% end %>
這是我的 「用戶」 表:
create_table "users", force: :cascade do |t|
t.string "username"
t.string "first_last_name"
t.string "email"
t.string "password_digest"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "remember_digest"
t.boolean "admin", default: false
t.string "activation_digest"
t.boolean "activated", default: false
t.datetime "activated_at"
t.string "reset_digest"
t.datetime "reset_sent_at"
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["username"], name: "index_users_on_username", unique: true
end
這是我的「上崗」表:
create_table "posts", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "title"
t.text "body"
end
這是我在我的Sessions_helper.rb是在我application_controller.rb通過include SessionsHelper
使用current_user
方法。
# Returns true if the given user is the current user.
def current_user?(user)
user == current_user
end
# Returns the user corresponding to the remember token cookie.
def current_user
if (user_id = session[:user_id])
@current_user ||= User.find_by(id: user_id)
elsif (user_id = cookies.signed[:user_id])
user = User.find_by(id: user_id)
if user && user.authenticated?(cookies[:remember_token])
log_in user
@current_user = user
end
end
end
如何解決此錯誤?提前謝謝你。
你登錄了嗎?是否設置了session [:user_id]?是否設置了cookies.signed [:user_id]?用戶('User.find_by(...)')是否真的存在?你期待什麼行爲? –
在測試之前如果'current_user'是一個管理員,你應該測試用戶是否被認證(通常是一個幫助器方法'logged_in?') – MrYoshiji
不,我沒有登錄,但我希望頁面加載爲未記錄在觀衆中,因爲這是一篇博文。 – Jake