Thursday 15 May 2014

ruby - Hartl's Rails Tutorial (rails-4-0) section 10.3.2 param not found -



ruby - Hartl's Rails Tutorial (rails-4-0) section 10.3.2 param not found -

i've been struggling while , can't figure out happening. i'm working way through michael hartl's rails tutorial , have come have issue of tests. these failing test results:

failures: 1) user pages signup invalid info should not create user failure/error: expect { click_button submit }.not_to change(user, :count) actioncontroller::parametermissing: param not found: user # ./app/controllers/users_controller.rb:61:in `user_params' # ./app/controllers/users_controller.rb:21:in `create' # ./spec/requests/user_pages_spec.rb:89:in `block (5 levels) in <top (required)>' # ./spec/requests/user_pages_spec.rb:89:in `block (4 levels) in <top (required)>' 2) user pages signup invalid info after submission failure/error: before { click_button submit } actioncontroller::parametermissing: param not found: user # ./app/controllers/users_controller.rb:61:in `user_params' # ./app/controllers/users_controller.rb:21:in `create' # ./spec/requests/user_pages_spec.rb:93:in `block (5 levels) in <top (required)>' 3) user pages signup invalid info after submission failure/error: before { click_button submit } actioncontroller::parametermissing: param not found: user # ./app/controllers/users_controller.rb:61:in `user_params' # ./app/controllers/users_controller.rb:21:in `create' # ./spec/requests/user_pages_spec.rb:93:in `block (5 levels) in <top (required)>' 4) user pages signup valid info should create user failure/error: before { valid_signup(user) } capybara::elementnotfound: unable find field "name" # ./spec/support/utilities.rb:10:in `valid_signup' # ./spec/requests/user_pages_spec.rb:102:in `block (4 levels) in <top (required)>' 5) user pages signup valid info after saving user failure/error: before { valid_signup(user) } capybara::elementnotfound: unable find field "name" # ./spec/support/utilities.rb:10:in `valid_signup' # ./spec/requests/user_pages_spec.rb:102:in `block (4 levels) in <top (required)>' 6) user pages signup valid info after saving user failure/error: before { valid_signup(user) } capybara::elementnotfound: unable find field "name" # ./spec/support/utilities.rb:10:in `valid_signup' # ./spec/requests/user_pages_spec.rb:102:in `block (4 levels) in <top (required)>' 7) user pages signup valid info after saving user failure/error: before { valid_signup(user) } capybara::elementnotfound: unable find field "name" # ./spec/support/utilities.rb:10:in `valid_signup' # ./spec/requests/user_pages_spec.rb:102:in `block (4 levels) in <top (required)>' finished in 9.1 seconds 119 examples, 7 failures failed examples: rspec ./spec/requests/user_pages_spec.rb:88 # user pages signup invalid info should not create user rspec ./spec/requests/user_pages_spec.rb:95 # user pages signup invalid info after submission rspec ./spec/requests/user_pages_spec.rb:96 # user pages signup invalid info after submission rspec ./spec/requests/user_pages_spec.rb:104 # user pages signup valid info should create user rspec ./spec/requests/user_pages_spec.rb:113 # user pages signup valid info after saving user rspec ./spec/requests/user_pages_spec.rb:115 # user pages signup valid info after saving user rspec ./spec/requests/user_pages_spec.rb:116 # user pages signup valid info after saving user

so here's user_pages_spec.rb:

require 'spec_helper' describe "user pages" subject { page } describe "index" let(:user) { factorygirl.create(:user) } before sign_in user visit users_path end { should have_title('all users') } { should have_content('all users') } describe "pagination" before(:all) { 30.times { factorygirl.create(:user) } } after(:all) { user.delete_all } { should have_selector('div.pagination') } "should list each user" #user.all.each |user| user.paginate(page: 1).each |user| expect(page).to have_selector('li', text: user.name) end end end describe "delete links" { should_not have_link('delete') } describe "as admin user" let(:admin) { factorygirl.create(:admin) } before sign_in admin visit users_path end { should have_link('delete', href: user_path(user.first)) } "should able delete user" expect click_link('delete', match: :first) end.to change(user, :count).by(-1) end { should_not have_link('delete', href: user_path(admin)) } end end end describe "profile page" let(:user) { factorygirl.create(:user) } let!(:m1) { factorygirl.create(:micropost, user: user, content: "foo") } let!(:m2) { factorygirl.create(:micropost, user: user, content: "bar") } before { visit user_path(user) } { should have_content(user.name) } { should have_title(user.name) } describe "microposts" { should have_content(m1.content) } { should have_content(m2.content) } { should have_content(user.microposts.count) } end end describe "signup page" before { visit signup_path } { should have_content('sign up') } { should have_title(full_title('sign up')) } end describe "signup" before { visit signup_path } let(:submit) { "create account" } describe "with invalid information" "should not create user" expect { click_button submit }.not_to change(user, :count) end describe "after submission" before { click_button submit } { should have_title('sign up') } { should have_content('error') } end end describe "with valid information" let(:user) {factorygirl.build(:user)} before { valid_signup(user) } "should create user" expect { click_button submit }.to change(user, :count).by(1) end describe "after saving user" before { click_button submit } #let(:user) { user.find_by(email: 'user@example.com') } { should have_title(user.name) } #it { should have_selector('title', text: user.name) } { should have_selector('div.alert.alert-success', text: 'welcome') } { should have_link('sign out') } end end end describe "edit" let(:user) { factorygirl.create(:user) } before sign_in user visit edit_user_path(user) end describe "page" { should have_content("update profile") } { should have_title("edit user") } { should have_link('change', href: 'http://gravatar.com/emails') } end describe "with invalid information" before { click_button "save changes" } { should have_content('error') } end describe "with valid information" let(:new_name) { "new name" } let(:new_email) { "new@example.com" } before fill_in "name", with: new_name fill_in "email", with: new_email fill_in "password", with: user.password fill_in "confirm password", with: user.password click_button "save changes" end { should have_title(new_name) } { should have_selector('div.alert.alert-success') } { should have_link('sign out', href: signout_path) } specify { expect(user.reload.name).to eq new_name } specify { expect(user.reload.email).to eq new_email } end describe "forbidden attributes" let(:params) { user: {admin: true, password: user.password, password_confirmation: user.password } } end before sign_in user, no_capybara: true patch user_path(user), params end specify { expect(user.reload).not_to be_admin } end end end

users_controller.rb:

class userscontroller < applicationcontroller before_action :signed_in_user, only: [:index, :edit, :update, :destroy] before_action :correct_user, only: [:edit, :update] before_action :admin_user, only: :destroy before_filter :signed_in_user_filter, only: [:new, :create] def index @users = user.paginate(page: params[:page]) end def show @user = user.find(params[:id]) @microposts = @user.microposts.paginate(page: params[:page]) end def new @user = user.new end def create @user = user.new(user_params) if @user.save sign_in @user flash[:success] = "welcome sample app!" redirect_to @user else render 'new' end end def destroy @user = user.find(params[:id]) if current_user == @user flash[:error] = "you must not delete yourself." #redirect_to users_path else @user.destroy flash[:success] = "user deleted." #redirect_to users_url end redirect_to users_path end def edit #@user = user.find(params[:id]) end def update #@user = user.find(params[:id]) if @user.update_attributes(user_params) flash[:success] = "profile updated" redirect_to @user else render 'edit' end end private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation) end #before filters def signed_in_user unless signed_in? store_location redirect_to signin_url, notice: "please sign in." end end def signed_in_user_filter redirect_to root_path, notice: "already logged in" if signed_in? end def correct_user @user = user.find(params[:id]) redirect_to(root_url) unless current_user?(@user) end def admin_user redirect_to(root_url) unless current_user.admin? end end

i'm not sure else releveant here's app/views/users/new.html.erb:

<% provide(:title, 'sign up') %> <h1>sign up</h1> <div class="row"> <div class="span6 offset3"> <%= form_for(@user) |f| %> <%= render 'shared/error_messages', object: f.object %> <%= f.submit "create account", class: "btn btn-large btn-primary" %> <% end %> </div> </div>

to honest i'm not 100% sure problem. happened these latest changes i've made in chapter. seek exercises there's variation in i'm supposed edit don't know if i've messed or perhaps done dumb. when visit app browser, , click "sign me up" link register new user reddish rails error page says actioncontroller::parametermissing in userscontroller#create don't know means. didn't think changed code impact that, i've tinkered around stuff seek finish previous exercises perhaps that's whats happening.

thanks help! first post didn't create huge error in etiquette/formatting. searched similar problems, usual, couldn't find anything.

edit: wanted add together i've been working off previous version of tutorial wasn't done when new edition came out. can find here: http://rails-4-0.railstutorial.org/book/user_microposts

i think reply pretty simple. looks deleted of fields out of form when wanted add together in error rendering component. sign-up form should like:

<% provide(:title, 'sign up') %> <h1>sign up</h1> <div class="row"> <div class="span6 offset3"> <%= form_for(@user) |f| %> <%= render 'shared/error_messages', object: f.object %> <%= f.label :name %> <%= f.text_field :name %> <%= f.label :email %> <%= f.text_field :email %> <%= f.label :password %> <%= f.password_field :password %> <%= f.label :password_confirmation, "confirmation" %> <%= f.password_field :password_confirmation %> <%= f.submit "create account", class: "btn btn-large btn-primary" %> <% end %> </div> </div>

ruby ruby-on-rails-4 rspec rspec-rails railstutorial.org

No comments:

Post a Comment