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

时间:2018-02-07 00:59:57

标签: ruby-on-rails devise

在我的索引页面中,我尝试创建一个包含表单的模式,以便用户可以在索引页面上创建用户。我正在使用设计来创建这些用户。

但是,当我尝试在模态中为此创建表单时,我收到此错误。

  

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

<%= form_for @user, html: { multipart: true } do |form| %>
 ...
<% end %>

这是我的控制器:

class UsersController < ApplicationController
  before_action :find_account, only: [:index, :new, :create]

  def index
    if params[:email].present?
      @users = User.where(email: params[:email]).first
    else
      @users = User.all
    end
    respond_with @users
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save
        format.html { redirect_to root_url, notice: 'User was sucessfully created' }
      else
        format.html { render :new }
      end
    end
  end

  private
    def user_params
      params.require(:user).permit(:email, :first_name, :last_name, :password)
    end

    def find_account
      @account ||= Account.find(params[:account_id])
    end
end

用户是嵌套路由,因为它属于某个帐户:

new_account_user GET /accounts/:account_id/users/new(.:format)   users#new

有人知道我为什么会收到这个错误吗?由于我在控制器中创建@user变量并在before_action中找到account_id,因此我不确定问题是什么。

更新

如果我以另一种形式实现此功能,则会产生相同的错误。可能与此有关的事情不在正确的操作页面上?

1 个答案:

答案 0 :(得分:0)

您定义了@user,但在表单中使用@material,当然@materialnil - &gt;抛出错误。

如果用户属于帐户,则表单应为:

<%= form_for [@account, @user], html: { multipart: true } do |form| %>
 ...
<% end %>

如果用户是独立的,那么表格应为:

<%= form_for @user, html: { multipart: true } do |form| %>
 ...
<% end %>