forms中的第一个参数不能包含nil或者是空的Hartl的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:
bundle exec rspec spec/requests/user_pages_spec.rb -e "signup with invalid information"
在以下行:
这是我的代码。 如果我没有把它搞清楚,请告诉我如何改进这个问题:我对StackOverflow也很陌生
应用程序/视图/用户/ new.html.erb:
Sign up
应用程序/资产/控制器/ users_controller.rb:
class UsersController < ApplicationController def show @user = User.find(params[:id]) end def create @user = User.new(user_params) if @user.save # Handle a successful save. else render 'new' end end private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation) end end
规格/请求/ user_pages_spec.rb
require 'spec_helper' describe "User pages" do subject { page } describe "signup page" do before { visit signup_path } it { should have_content('Sign up') } it { should have_title(full_title('Sign up')) } end describe "profile page" do let(:user) { FactoryGirl.create(:user) } before { visit user_path(user) } it { should have_content(user.name) } it { should have_title(user.name) } end describe "signup" do before { visit signup_path } let(:submit) { "Create my account" } describe "with invalid information" do it "should not create a user" do expect { click_button submit }.not_to change(User, :count) end end describe "with valid information" do before do fill_in "Name", with: "Example User" fill_in "Email", with: "user@example.com" fill_in "Password", with: "foobar" fill_in "Confirmation", with: "foobar" end it "should create a user" do expect { click_button submit }.to change(User, :count).by(1) end end end end
在new.html.erb
您指定了form_for(@user)
,这意味着在调用new
操作之前,您需要在实例变量@user
拥有一些值。
您可以通过两种方式完成此操作:
一种方法是在控制器中定义一个new
的动作,在渲染new.html.erb
布局之前调用该动作。 例如:
def new @user = User.new end
另一种方式是在你的表单本身你可以指定类似的东西
<%= form_for(User.new) do |f| %>
在new
操作中定义它是更标准的方法。
控制器文件中的操作顺序很重要。 我有同样的错误,直到我找出行动方法的顺序问题。 例。 控制器文件
def edit @post = Post.find(params[:id]) end def update end private def post_params params.require(:post).permit(:title, :body) end
我正在处理编辑操作,并且遇到了与您相同的错误。 问题是我在私人行动下编写了编辑行动。 一旦我改变了这个行动的顺序。 它就像一个魅力。
我想要实现的目标是什么? 我试图获取post实例变量的值并将其用于html表单。
我没有看到你控制器上的新动作。
def new @user = User.new end
我可能间接地做过,但是不能自己定义它。 从你的标题可能是@user变量为零的原因,它没有定义。
- Rails 4.0.0中的ActiveModel禁止错误
- ActiveRecord,has_many:through,与STI的多态关联
- Rails测试 – 如何测试特定的validation?
- 注册后基于导航的重定向
- 自定义设计会话控制器的RSpec测试因AbstractController :: ActionNotFound失败
- 将rails app上传到firebase
- 在ruby on rails上显示表单提交时没有页面刷新的结果数据
- 未定义的方法`end_with?’ 为“没有这样的文件加载 – Win32API”:字符串(NoMethodError)
- Rails_admin:我应该有admin_user或具有admin角色的用户来管理用户和管理面板