No route matches [POST] "/home/new"

Hello all, I’m new to ruby and I am having trouble with adding new data
(name, height, weight, etc). Everytime I try to save my data, I get
this error:

No route matches [POST] “/home/new”
Rails.root: C:/Users/Bob/blog

Request

Parameters:

{“utf8”=>“✓”,
“authenticity_token”=>“Vgkmt3PPEobQFpJyWNIoHNnXtkmq2Uyk4vjMvgl8ZdhwIvc516BzXUfDs05OZ/8LLfkyKTxca90qiA2LBYBnwQ==”,
@input”=>{“name”=>“asd”,
“weight”=>“233”,
“height”=>“23”,
“color”=>“red”,
“age”=>“23”},
“commit”=>“Save @input”}

I am able to view index and enter the information, but when I submit, I
get this problem. Any help would be appreciated! Thank you

home_controller.rb
class HomeController < ApplicationController
def index
@inputs = Person.all
end

def new
@input = Person.new
end

def create
@input = Person.new(input_params)
if @article.save
redirect_to @input
else
render ‘new’
end
end

def show
@input = Person.find(params[:id])
end

def edit
@input = Person.find(params[:id])
end

def update
@input = Person.find(params[:id])
respond_to do |x|
if @input.update(input_params)
x.html {redirect_to :action => ‘index’}
else
x.html {render :edit}
end
end
end

private

def input_params
params.require(:inputs).permit(:name, :weight, :height, :color,
:age)
end
end

=================================================================
new.html.erb

New People

<%= render ‘form’ %>

<%= link_to ‘Back’, home_index_path %>

=================================================================
_form.html.erb

<%= form_for :@input do |person| %>

<%= person.label :name %>
<%= person.text_field :name %>
<%= person.label :weight %>
<%= person.number_field :weight %>
<%= person.label :height %>
<%= person.number_field :height %>
<%= person.label :color %>
<%= person.text_field :color %>
<%= person.label :age %>
<%= person.number_field :age %>
<%= person.submit %>
<% end %>

=================================================================
index.html.erb

<%= notice %>

Listing People

<% @inputs.each do |person| %> <% end %>
Name Weight Height Color Age
<%= person.name %> <%= person.weight %> <%= person.height %> <%= person.color %> <%= person.age %> <%= link_to 'Show',home_path(person.id) %> <%= link_to 'Edit', edit_home_path(person.id) %>

<%= link_to 'New Person', new_home_path %>

=================================================================

my routes.db has

resources :home
root ‘home#index’

I’m pretty new to ruby as well but I think the problem is that the Rails
router doesn’t know what to do with a POST request to “/home/new”. I
think
you just have to add this line to routes.rb:

post ‘home/new’, to: ‘home#new’

Like I said I’m a newbie myself so I’d love it if someone could correct
me
if I’m wrong or let me know if I got it all.

You have an error in your controller

You have @article.save in the create action, rather than @input.save

Additionally it is convention to use the same name of the variable as
the model, so you should really use @person = Person.new, rather than
@input = Person.new

You can always check what routes are recognised by use of the ‘rake
routes’ command

Hello, thanks to you I have been able to add in the data. I also changed
and cleaned up the code and used the convention with regards to the
variables. I have another question regarding the destroy/deleting data,
when I click on delete, it directs me to show where i can view the data,
but does not delete anything. Here is my updated code

peoplecontroller:
class PeopleController < ApplicationController

def index
    @people = Person.all
end


def show
    @person = Person.find(params[:id])
end


def new
    @person = Person.new
end


def create
    @person = Person.new(person_params)
    @person.save
    redirect_to :action => :index
end


def edit
    @person = Person.find(params[:id])
end


def update
    @person = Person.find(params[:id])
    @person.update(person_params)
    redirect_to :action => :show, :id => @person
end


def destroy
    @person = Person.find(params[:id])
    @person.destroy
    redirect_to :action => :index
end

private
def person_params
    params.require(:person).permit(:name, :weight, :height, :color, 

:age)
end
end

======================================================================
index:

People list

<% @people.each do |e| %> <% end %>
Name Weight Height Color Age
<%= e.name %> <%= e.weight %> <%= e.height %> <%= e.color %> <%= e.age %> <%= link_to 'Show', :controller => "people", :action => "show", :id => e %> <%= link_to 'Edit', :controller => "people", :action => "edit", :id => e %> <%= link_to 'Delete', :controller => "people", :action => "destroy", :id => e %>

<%= link_to 'New Input', :controller => 'people', :action => 'new' %>

=====================================================================
show.html.erb

<%= notice %>

Name: <%= @person.name %>

Weight: <%= @person.weight %>

Height: <%= @person.height %>

Color: <%= @person.color %>

Age: <%= @person.age %>

On 27 January 2016 at 18:54, Bob T. [email protected] wrote:

Hello, thanks to you I have been able to add in the data. I also changed
and cleaned up the code and used the convention with regards to the
variables. I have another question regarding the destroy/deleting data,
when I click on delete, it directs me to show where i can view the data,
but does not delete anything. Here is my updated code

Look in log/development.log and when you click delete you should see
the request and whether it is calling the destroy method. You can
insert diagnostic code in your methods using stuff like
def destroy
logger.info “In destroy”
@person = Person.find(params[:id])
logger.info @person.inspect
@person.destroy
redirect_to :action => :index
end

and your logger output will appear in the log file.

Colin

I dont get the error, but when I try to save the data, it seems to
reload the page again, and the data doesnt get saved. It doesn’t appear
at all when i go back to /home

In the delete link, you need to use the delete method-Rails now expects
a delete verb, where as your code is generating a get I believe

So

<%= link_to ‘Delete’, :controller => “people”, :action
=> “destroy”, :id => e, :method => :delete %>

Sent from my iPhone

Mike S. wrote in post #1180984:

In the delete link, you need to use the delete method-Rails now expects
a delete verb, where as your code is generating a get I believe

So

<%= link_to ‘Delete’, :controller => “people”, :action
=> “destroy”, :id => e, :method => :delete %>

Sent from my iPhone

I have the changes and it just directs me to the show page displaying
the info like before. When I go back to /people the data is still there.
In the logs it says:

Started GET “/people/1?method=delete” for ::1 at 2016-01-27 17:38:42
-800
Processing by PeopleController#show as HTML
Parameters: {“method” => “delete”, “id” => “2”}
Person Load (0.5ms) SELECT “people”.* FROM “people” WHERE “people”.“id”
= $1 LIMIT 1 [[“id”, 2]]
Rendered people/show.html.erb within layouts/application (0.0ms)
Completed 200 OK in 26ms (views: 25.0 ms | ActiveRecord :0.5 ms)

Started GET “/stylesheets/default.css” for ::1 at …

Started GET “/javascripts/default.js” for ::1 at …

I did some searching and I was wondering if it is the javascript because
I changed the application.html.erb from

<%= stylesheet_link_tag ‘application’
<%= javascript_include_tag ‘application’

and replaced ‘application’ to ‘default’ since I am on windows and the
‘application’ was causing problems

I assume therefore you also renamed the
/app/assets/javascripts/application.js to default.js

sorry I do not develop under Windows, so cannot be sure if there is not
some other issue related to that, there are a number of shortcomings
when you use rails on Windows, but that is mainly gem support, not
JavaScript

Just as an interest, can you create a blank application, and do
something like

rails g scaffold something field1 field2

And then check the code it generated in the views - I doubt it is
different on Windows, but I cannot be sure

Also run the app and see if you can add/delete ok

Sent from my iPad

I actually did not rename it to default.js, but when I try to do that
and access localhost I get an error:

ExecJS::ProgramError in People#index
Showing: /app/views/layouts/application.html.erb where line #6 raised:
TypeError: Object doesn’t support this property or method

and line 6 which is:

<%= javascript_include_tag ‘default’, ‘data-turbolinks-track’ => true %>

I tried using scaffold and it does the same thing, it can add, but it
does not delete, it directs me to /posts/1 where it just displays the
data for id:1

The code in views is different from mine:

index:

<%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %>

controller:

def destroy
@post.destroy
respond_to do |format|
format.html { redirect_to posts_url, notice: ‘Post was
successfully destroyed.’ }
format.json { head :no_content }
end
end

Hm, I found this from stackoverflow
http://stackoverflow.com/questions/7281907/rails-3-1-issue-with-javascript-include-tag-in-application-html-erb

and if I remove //= require_tree and //= turbolinks

then I can include application.js and the add/delete does work for
scaffold, but I still cannot remove people

So something is definitely broken in your Javascripts, or the views -
the scaffold code there is what I am used to seeing, just referencing
the record rather than the explicit ID you pass in.

I am at a loss as to why Windows is complaining when you change the
name, or indeed why it would not respond to the standard name of
application.js - which has no meaning to Windows that I am aware of