【问题标题】:Call the current user in application controller in rails在 Rails 中调用应用程序控制器中的当前用户
【发布时间】:2018-09-08 00:51:46
【问题描述】:

大家好,我对 Rails 很陌生,如果我的问题非常简单或愚蠢,请理解我。我目前正在使用devise gem,我尝试将模态放入我的application.html.erb 以便模态始终出现在顶部,但我收到的错误消息是,

ApplicationController:Class 的未定义局部变量或方法 `current_user'

我应该在哪里修复从Post.rb 调用Application.html.erb 中的记录?感谢您的帮助!

Application.html.erb

<ul class="nav navbar-nav navbar-right">
   <% if user_signed_in? %> 
     <li><%=link_to 'Sign out', destroy_user_session_path, method: 'delete' %></li>
     <%=render "post_list", post_list: @post_list%> //I tried to call this
<% else %> 
   <li><%=link_to 'Sign in',  new_user_session_path %></li>
   <li><%=link_to 'Sign up',  new_user_registration_path %></li>
<% end %>
</ul>

应用程序控制器

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  @post_list = Post.where(user_id: current_user).list?

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
    devise_parameter_sanitizer.permit(:account_update, keys: [:name])
  end
end

【问题讨论】:

  • 你真的在实例方法之外调用@post_list = Post.where(user_id: current_user).list?吗?另外,您是否按照设计的说明进行操作?我认为您至少缺少一个 before_action 来实际执行用户登录。 before_action :authenticate_user!
  • 你的意思是如果我在视图中调用它?
  • 在控制器中。您设置@post_list 的语句我怀疑您应该在实例方法中调用它。您能否使用控制器中的所有代码更新您的问题?
  • 啊,这一切都在“应用程序控制器”中......
  • 好的,那么您缺少一些方法...阅读devise page 中的控制器过滤器和帮助器部分。您的ApplicationController 中没有声明before_action :protect_from_forgery 也很奇怪

标签: ruby-on-rails devise


【解决方案1】:

这是您可以在ApplicationController 中访问current_user

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def current_user_posts?
    @post_list = Post.where(user_id: current_user).list? // current_user should work here.
  end

end

【讨论】:

    猜你喜欢
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    相关资源
    最近更新 更多