gpt4 book ai didi

ruby-on-rails - 为什么我收到错误 Undefined method `name' for nil :NilClass with Ruby on Rails?

转载 作者:行者123 更新时间:2023-12-04 05:53:21 24 4
gpt4 key购买 nike

我认为诸如姓名和电子邮件之类的方法是 rails 中的默认方法?

在我的静态页面 View 中,在 profile.html.erb 中我有:

<% if logged_in? %>
<% provide(:title, @user.name) %>
<% else %>
<% provide(:title, 'Profile')%>
<% end %>

我放入了我的 static_page_controller
def profile
@user = User.find_by_remember_token(:remember_token)
end

当我转到控制台时 User.find_by_remember_token("actualtoken").name 会返回适当的用户名,但 :remember_token 不会。如何让 :remember_token = 登录用户记住 token ?

在我的 session_helper 我有
def log_in(user)
cookies.permanent[:remember_token] = user.remember_token
current_user = user
end

def logged_in?
!current_user.nil?
end

def current_user=(user)
@current_user = user
end

def current_user
@current_user ||= user_from_remember_token
end

def log_out
current_user = nil
cookies.delete(:remember_token)
end


private

def user_from_remember_token
remember_token = cookies[:remember_token]
User.find_by_remember_token(remember_token) unless remember_token.nil?
end
end

将它复制到我的 static_pages_helper 没有完成任何事情。

最佳答案

您应该了解 Rails 框架和 ruby​​ 语言的快速事项:

  • 在您的任何助手中定义的函数将可用于所有助手和 View (因此没有理由通过不同的助手复制和粘贴相同的函数);
  • 您可能正在使用身份验证 gem,我猜它是 Devise gem。如果这是对的,那么除非您有理由这样做,否则您不应该覆盖他们的助手;
  • User.anything将从 User 类中调用静态函数;
  • user = User.find_by_anything(the_thing)是 ActiveModel 提供的类静态帮助器,它将查询数据库以查找具有 *anything = the_thing* 的用户;此用户或 nil 将被返回;
  • user.an_attribute将调用返回用户指定属性的函数(默认与该属性的列名相同);
  • user.try(:anything)将尝试从用户调用该函数并返回其值。如果 user 为 nil,则返回值也将为 nil。

  • 也就是说,我猜您只是想检索当前用户的记住 token ,这可以通过以下方式完成:
    user = current_user.try(:remember_token)

    编辑:问题有点乱,但我也认为以下代码适用于您的 Controller :
    def profile
    @user = User.find_by_remember_token(params[:remember_token])
    end

    您必须通过 params 散列访问请求的参数。

    关于ruby-on-rails - 为什么我收到错误 Undefined method `name' for nil :NilClass with Ruby on Rails?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9811419/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com