【问题标题】:Devise - First argument in form cannot contain nil or be empty设计 - 表单中的第一个参数不能包含 nil 或为空
【发布时间】:2014-01-07 08:03:45
【问题描述】:

我为未登录的用户制作了自定义布局。当我打开它时,它显示First argument in form cannot contain nil or be empty。我做了一些谷歌搜索,似乎与控制器中的代码不正确有关。 (https://github.com/plataformatec/devise/issues/2451)

我没有为 Devise 使用自定义控制器,如果没有必要,我不想这样做。

有没有办法绕过这个错误而不使用自定义控制器?

错误是在new(resource)的form_for上创建的

<%= form_for(resource, :as => resource_name,
    :url => session_path(resource_name) ,
    :html => {:id => "sign_in_user"},
    #:format => :json,
    :remote => true, :url => session_path(resource_name)) do |f| %>
<% end %>

【问题讨论】:

    标签: ruby-on-rails devise ruby-on-rails-4


    【解决方案1】:

    好像是在说resource 没有数据?


    设计

    由于您使用的是resource,我想您是指Devise 的load forms on multiple pages 的能力:

      #app/helpers/application_helper.rb
      def resource_name
        :user
      end
    
      def resource
        @resource ||= User.new
      end
    
      def devise_mapping
        @devise_mapping ||= Devise.mappings[:user]
      end
    

    也许这会有所帮助?

    【讨论】:

      【解决方案2】:

      确保将自定义控制器中的资源初始化为 self.resource

      例如

      self.resource = resource_class.new(sign_in_params)
      

      【讨论】:

      • 你应该强调SELF是重要的部分。干得好!
      【解决方案3】:

      要解决此问题并确保 resource 在 Rails 4.2 应用程序中不为零,我需要将 build_resource({}) 添加到我的 registrations#new 操作中。我从 Devise::Registrations 控制器继承,但不依赖于super

      https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb#L99

      在从 Rails 3.2 升级到 Rails 4.2 之前没有抛出错误

      【讨论】:

      • 谢谢。这正是我的情况。顺便说一句,你可以只使用 build_resource ,没有空的哈希参数
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多