设计 - 表单中的第一个参数不能包含nil或为空

时间:2014-01-07 08:03:45

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

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

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

有没有办法在不使用自定义控制器的情况下绕过此错误?

错误是在新(资源)

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 %>

3 个答案:

答案 0 :(得分: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

也许这会有所帮助?

答案 1 :(得分:1)

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

e.g。

self.resource = resource_class.new(sign_in_params)

答案 2 :(得分:1)

要解决此问题并确保{RES 4.2应用中的resource不是nil,我需要将build_resource({})添加到我的注册#new动作中。我继承自Devise :: Registrations控制器,但不依赖于super

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

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