Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 表单中的第一个参数不能包含nil或为空Hartl';s Rails 4教程_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 表单中的第一个参数不能包含nil或为空Hartl';s Rails 4教程

Ruby on rails 表单中的第一个参数不能包含nil或为空Hartl';s Rails 4教程,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我正在学习Michael Hartl的Rails教程,在第7.3.3节中遇到了一个问题。我收到此错误消息: ArgumentError in Users#new Showing /Users/Anuraag/rails_projects/sample_app/app/views/users/new.html.erb where line #6 raised: First argument in form cannot contain nil or be empty 当我运行以下rspec时:

我正在学习Michael Hartl的Rails教程,在第7.3.3节中遇到了一个问题。我收到此错误消息:

ArgumentError in Users#new
Showing /Users/Anuraag/rails_projects/sample_app/app/views/users/new.html.erb where line #6 raised:
First argument in form cannot contain nil or be empty
当我运行以下rspec时:

bundle exec rspec spec/requests/user_pages_spec.rb -e "signup with invalid information"
在以下行:

<%= form_for(@user) do |f| %>

我看不到你身上有什么新动作

def new
  @user = User.new
end
我可能是间接的,但这不会伤害你自己定义它。
从你的标题来看,这可能就是@user变量为nil的原因,它没有定义。

在你的
new.html.erb
中,你已经为(@user)指定了
表单,这意味着在调用
new
操作之前,你需要在实例变量
@user
中有一些值

您可以通过两种方式完成:

一种方法是在控制器中定义一个动作
new
,在呈现
new.html.erb
布局之前调用该动作。例如:

def new
  @user = User.new
end
另一种方式是,在表单本身中,您可以指定如下内容

<%= form_for(User.new) do |f| %>


新操作中定义它是更标准的方法。

控制器文件中的操作顺序很重要。我也犯了同样的错误,直到我解决了关于动作顺序方法的问题。 例子。 控制器文件

def edit
  @post = Post.find(params[:id])
end

def update

end

private
def post_params
    params.require(:post).permit(:title, :body)
end
我正在进行编辑操作,得到了与您相同的错误。问题是我已经在私人行动下编写了编辑行动。一旦我改变了这个动作的顺序。它就像一个符咒

我想要达到的目标是什么?
我试图获取post实例变量的值并将其用于html表单

您收到的错误消息是什么?另外,你可以发布rspec的例子吗?我做了你要求的编辑。你现在有什么见解了吗?我以为我的“添加创建”块解决了这个问题…?什么是“添加创建”?在控制器中?在用户/new.html.erb视图之后使用。您确实需要在控制器中执行新操作。或者Deavise处理该操作,但在代码上方尝试,它应该可以消除零错误。为什么Deavise会在OP实际使用其自己的控制器时处理它
UsersController
感谢kirti给出相同的答案。但是请注意,它没有在控制器中出错,给出了一个未定义的新动作,因此,有东西正在间接地创建它,它可能是rails、cancan、Desive或其他一些gem。我的创建动作以及控制器中的私有用户参数定义不是代替了新动作吗?你能看一下我正在学习的Rails教程吗?在第7.3.3节中,请查看
清单7.18
,其中为
用户控制器
定义了
操作。我想你错过了。谢谢!:)你能解释一下为什么你需要这个动作和我的后续代码吗?对我来说这似乎是多余的。请阅读
new
中的CRUD,它是一个呈现
new.html.erb
视图的操作,而
create
是一个通过
new.html.erb
提交POST请求时调用的操作。您好,当我试图添加带有显示错误的表单时,例如:ArgumentError in Pages#about:表单中的第一个参数不能包含nil或为空。这是什么,因为我是ROR的新手这里是我的表格

def new
  @user = User.new
end
<%= form_for(User.new) do |f| %>
def edit
  @post = Post.find(params[:id])
end

def update

end

private
def post_params
    params.require(:post).permit(:title, :body)
end