【问题标题】:Rails form helpers not working in only one of my controllersRails 表单助手不能仅在我的一个控制器中工作
【发布时间】:2018-02-11 17:34:04
【问题描述】:

我遇到了一个奇怪的问题,尝试使用表单助手呈现表单时出现以下错误:NoMethodError in Admin#login undefined method '[]' for nil:NilClass,奇怪的瘦,我只在我的Admin 控制器中收到此错误,而不是任何其他的。

我尝试将表单粘贴到与不同控制器关联的视图中,并且它呈现得很好。我还尝试将另一个页面中的工作表单粘贴到这个页面中,它给了我同样的错误。

这是我的控制器:

class AdminController < ApplicationController    
    def login        
    end

    def session
    end
end

这是我的login.html.erb

<%= form_with url: login_path do |form| %>
  <%= form.text_field :title %>
<% end %>

这是运行 rake routes 的相关输出:

          root GET   /                                  website#index
         admin GET   /admin(.:format)                   admin#admin
         login GET   /login(.:format)                   admin#login
               POST  /login(.:format)                   admin#session

此表单适用于任何其他控制器,但不适用于AdminController,并且其他页面上的其他表单在此页面中不起作用。我使用form_tagform_for 得到同样的错误。

Rails 版本 5.1.4

Ruby 版本 2.3.2

这是我得到的堆栈跟踪:

NoMethodError: undefined method `[]' for nil:NilClass
from /home/yechielk/.rvm/gems/ruby-2.4.2/gems/actionpack-5.1.4/lib/action_controller/metal/request_forgery_protection.rb:374:in `real_csrf_token'
from /home/yechielk/.rvm/gems/ruby-2.4.2/gems/actionpack-5.1.4/lib/action_controller/metal/request_forgery_protection.rb:381:in `per_form_csrf_token'
from /home/yechielk/.rvm/gems/ruby-2.4.2/gems/actionpack-5.1.4/lib/action_controller/metal/request_forgery_protection.rb:302:in `masked_authenticity_token'
from /home/yechielk/.rvm/gems/ruby-2.4.2/gems/actionpack-5.1.4/lib/action_controller/metal/request_forgery_protection.rb:291:in `form_authenticity_token'
from /home/yechielk/.rvm/gems/ruby-2.4.2/gems/actionpack-5.1.4/lib/abstract_controller/helpers.rb:68:in `form_authenticity_token'
from /home/yechielk/.rvm/gems/ruby-2.4.2/gems/actionview-5.1.4/lib/action_view/helpers/url_helper.rb:598:in `token_tag'
from /home/yechielk/.rvm/gems/ruby-2.4.2/gems/actionview-5.1.4/lib/action_view/helpers/form_tag_helper.rb:855:in `extra_tags_for_form'
from /home/yechielk/.rvm/gems/ruby-2.4.2/gems/actionview-5.1.4/lib/action_view/helpers/form_tag_helper.rb:875:in `form_tag_html'
from /home/yechielk/.rvm/gems/ruby-2.4.2/gems/actionview-5.1.4/lib/action_view/helpers/form_helper.rb:765:in `form_with'
from /home/yechielk/Desktop/code/Personal/personal-site/app/views/admin/login.html.erb:1:in `_app_views_admin_login_html_erb___3018772792552054965_27358140'

【问题讨论】:

  • 那么,您在呈现表单或提交表单时是否遇到该错误?
  • 渲染时。
  • 你能列出所有的铁路路线吗?
  • @Leo 已添加到问题中

标签: ruby-on-rails ruby ruby-on-rails-5


【解决方案1】:

想通了。

事实证明,当我定义一个名为 session 的控制器操作时,它覆盖了 session 变量(在本例中为 nil),该变量破坏了另一个调用 session 的库。

【讨论】:

  • 好吧,由于您发布的原始 admin 控制器中没有 session 操作,因此您的问题没有足够的信息让任何人都能够帮助您。
  • 是的,很抱歉。总是你认为不相关的部分最终会惹恼你...... :(
猜你喜欢
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2015-12-27
  • 1970-01-01
  • 2018-04-07
相关资源
最近更新 更多