Tôi hiện đang trải qua hướng dẫn RoR (http://railstutorial.org/chapters/sign-in-sign-out#sec:signin_success là phần có liên quan) có vẻ khá tốt, mặc dù tôi đã gặp sự cố sau khi cố gắng xem trang web mẫu .biến cục bộ hoặc phương thức không xác định 'current_user'
Extracted source (around line #10):
7: <li><%= link_to "Home", root_path %></li>
8: <li><%= link_to "About", about_path %></li>
9:
10: <% if signed_in? %>
11: <li><%= link_to "Profile", current_user %></li>
12: <li><%= link_to "Sign out", signout_path, :method => delete %></li>
13: <% else %>
Như bạn có thể thấy, sự cố bắt nguồn từ phương pháp "signed_in?" Của tôi đó là nghĩa vụ phải kiểm tra xem người dùng đã đăng nhập hay không bằng cách kiểm tra xem biến CURRENT_USER được thiết lập (Tôi đã bao gồm phần còn lại của mã từ helper để đưa ra một bối cảnh, lời xin lỗi):
module SessionsHelper
def sign_in(user)
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
current_user = user
end
def sign_out
cookies.delete[:remember_token]
current_user = nil
end
def current_user= (user)
@current_user ||= user_from_remember_token
end
def signed_in?
!current_user.nil?
end
private
def user_from_remember_token
User.authenticate_with_salt(*remember_token)
end
def remember_token
cookies.signed[:remember_token] || [nil, nil]
end
end
Từ sự hiểu biết của tôi, .nil? là một phương pháp kiểm tra xem một đối tượng đã được xác định hay chưa và do đó đối tượng không được xác định sẽ không tạo ra lỗi mà đúng hơn là trả về false? Tôi đã tìm kiếm hướng dẫn cho tất cả các trường hợp của current_user (trước khi kiểm tra xem liệu có ai khác gặp vấn đề này với thành công nhỏ không) và mã của tôi có vẻ đúng nên tôi hơi bối rối và nếu có ai có thể giúp tôi hiểu cách biến Ruby đáng lẽ phải được truy cập và tại sao mã của tôi không hoạt động tôi sẽ biết ơn nhất.
Edit:
Tôi không chắc chắn nếu nó quan trọng với phạm vi là như tôi chỉ mới bắt đầu cả hai Rails và Ruby, tuy nhiên SessionsHelper helper đang được sử dụng bởi bộ điều khiển và quan điểm người dùng của tôi (nó bao gồm trong ứng dụng của tôi bộ điều khiển)
hoặc tôi tin rằng bạn có thể thực hiện "@current_user || = user_from_remember_token || false" nếu bạn muốn phù hợp hơn với mã hiện tại của mình. – JackCA
Trong khi đó chắc chắn dừng lỗi, nó liên tục trở về sai. Tôi đoán có thể có vấn đề với việc đăng nhập của tôi vào các phương thức khiến cho current_user không bao giờ được định nghĩa nên có lẽ tốt nhất cho tôi để xem nó sau một đêm ngủ ngon. – djlumley