I created a simple form using form_for and partials. When I enter a value in text field and click on add button, the data doesn’t get uploaded in database table.
I have done db migration and db schema exists for table but “select * from tasks” doesn’t return any rows and therefore UI doesn’t show any form data. Can someone please help me debug this issue?
So what does happen when you click on the form’s button ? Did you look at your application logs / server output? At first glance you’re posting to the wrong url - to create a new task you post to tasks_path where you have forced the url to task_path (which would be appropriate for updating an existing task).
If I change the path to tasks_path, I get the following error while navigating on to the page which has this form. If I keep task_path, navigation works fine.
undefined local variable or method `tasks_path' for #<#<Class:0xa3de690>:0xb550f644>
I don’t see any error in development.log when I click on the Add button. the page re-loads as expected because of “task_path” url but data doesn’t persist.
Trace:
Started POST "/task" for 127.0.0.1 at 2013-11-30 15:11:15 +0530
Processing by HomeLoginController#task as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"wXpiPiPabBjOBN1iqF/Hj4z81y3RCcSj/gRSpWFuIC0=", "task"=>{"name"=>"eeff"}, "commit"=>"Add"}
^[[1m^[[36mUser Load (0.2ms)^[[0m ^[[1mSELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1^[[0m
^[[1m^[[35mTask Load (0.2ms)^[[0m SELECT "tasks".* FROM "tasks"
Rendered home_login/_job_form.html.erb (1.2ms)
Rendered home_login/task.html.erb within layouts/application (67.2ms)
Completed 200 OK in 97.6ms (Views: 93.5ms | ActiveRecord: 0.4ms)
Also, I missed adding create action in controller earlier, have added it now:
Can I suggest that you work right through a good tutorial such as
railstutorial.org (which is free to use online). That will show you
the basics of rails so that you will be able to answer simple
questions yourself.
Also, I missed adding create action in controller earlier, have added it now:
def create
Task.create params[:task]*
redirect_to :back*
end*
Did you add a route for your create action ? That would also explain why tasks_path raises an exception (I was assuming you had resources :tasks in your routes). As Colin says, this sort of stuff is covered by most tutorials. This will also get you on the path of using standard naming conventions, which makes things a lot easier.