I keep getting the following error:
NoMethodError in Students#show
undefined method `student_accounts_path'' for
#<#Class:0x007ffe2bf6d688>:0x007ffe2c5e5628>
I am trying to implement a has_one model. I followed the rails guide
that used the :post has_many :comments example and tweaked it a bit.
my routes.rb file looks like this:
resources :students do
resource :account
end
My Students.controller, Account.controller files are attached.
Along with the /app/views/students/show.html.erb file
I have no idea what I''m doing wrong.
Can anyone please help me?
Attachments:
http://www.ruby-forum.com/attachment/7210/students_controller.rb
http://www.ruby-forum.com/attachment/7211/accounts_controller.rb
http://www.ruby-forum.com/attachment/7212/show.html.erb
--
Posted via http://www.ruby-forum.com/.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
Try rake routes - and you will see, there really isn''t defined a student_acounts_path Try: resources :students do resources :accounts end or alternatively in your show (if you want to add a show, edit or update-action in your accounts_controller without an :id param) form_for [@student, @student.build_account], :url => student_account_path(@student) best, B. Pieck On Sun, Apr 1, 2012 at 3:04 AM, ayesha fernando <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org>wrote:> I keep getting the following error: > NoMethodError in Students#show > undefined method `student_accounts_path'' for > #<#Class:0x007ffe2bf6d688>:0x007ffe2c5e5628> > > I am trying to implement a has_one model. I followed the rails guide > that used the :post has_many :comments example and tweaked it a bit. > > my routes.rb file looks like this: > resources :students do > resource :account > end > > My Students.controller, Account.controller files are attached. > Along with the /app/views/students/show.html.erb file > > I have no idea what I''m doing wrong. > Can anyone please help me? > > Attachments: > http://www.ruby-forum.com/attachment/7210/students_controller.rb > http://www.ruby-forum.com/attachment/7211/accounts_controller.rb > http://www.ruby-forum.com/attachment/7212/show.html.erb > > > -- > Posted via http://www.ruby-forum.com/. > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Thanks for your tips Bente, I ran rake routes, and this is what I got: student_account POST /students/:student_id/account(.:format) accounts#create I thought my routes.rb file HAD to be like this: resources :students do resource :account end because my Student model only ''has_one'' Account (not a has_many) I changed my form_for to: form_for ([@student, @student.build_account], :url => student_account_path(@student)) And I am no longer getting the ''NoMethodError'' BUT the account information is not being saved to the accounts table. What key concept am I not understanding? -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Hi Ayesha, it might be a typo in your routes: resource :accounts insted of resourceS :accounts Also please if you want to connect these tables you need a couple of things, not only nested routes. You also need: - has_many relationship in student.rb - belongs_to relationship in account.rb - you need to add 1-1 table column to both tables which refers to each others. Best way to do it with migrations like "rails generate migration AddStudentIdForAccounts" and AddAccountIdForStudents. Follow this http://guides.rubyonrails.org/migrations.html Fill these, then run "rake db:migrate" Finally you need the proper nested routes you mentioned above, also controllers and views in place with well-named methods. So in short way: 2 tables refers to each other (with 2 migrations), 2 model files refers to each other, routes.rb, controllers, views. HTH! YogiZoli PS. Highly recommend you this tutorial instead of Guides first: http://ruby.railstutorial.org/ruby-on-rails-tutorial-book?version=3.2 this helped me a lot in understanding full MVC in action! On Apr 1, 9:06 am, ayesha fernando <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Thanks for your tips Bente, > > I ran rake routes, and this is what I got: > student_account POST /students/:student_id/account(.:format) > accounts#create > > I thought my routes.rb file HAD to be like this: > resources :students do > resource :account > end > > because my Student model only ''has_one'' Account (not a has_many) > > I changed my form_for to: > form_for ([@student, @student.build_account], :url => > student_account_path(@student)) > > And I am no longer getting the ''NoMethodError'' BUT the account > information is not being saved to the accounts table. > > What key concept am I not understanding? > > -- > Posted viahttp://www.ruby-forum.com/.-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Hi YogiZoli,
Thanks for your post.
I think you meant has_one instead of ''has_many'' (in your first
bullet
point for student.rb).
I tried what you suggested, and my routes.rb file has
resource :accounts
I also went back to my original "form_for" text as per my attachment
and
I no longer see that NoMethodError (YAY!) that I first posted up.
I figured out why (at least i think i did) my ''insert into
accounts''
would delete when I rendered the show.html.erb file after creating an
account.... I had the text ":dependent => :destroy" in the model.rb
file
I''ve updated my models to have that 1-1 relationship.
While I was testing it out, I noticed the following in my server logs...
*****************************
Started POST "/students/4/accounts" for 127.0.0.1 at 2012-04-01
21:16:19
+1000
Processing by AccountsController#create as HTML
Parameters: {"utf8"=>"✓",
"authenticity_token"=>"FEdjo1+qRJ1cIQpwIbpRnvJ51esPgd/K8s9Hb4MOylQ=",
"account"=>{"name"=>"acname1",
"number"=>"1111"}, "commit"=>"Create
Account", "student_id"=>"4"}
Student Load (0.4ms) SELECT `students`.* FROM `students` WHERE
`students`.`id` = 4 LIMIT 1
(0.4ms) BEGIN
SQL (0.5ms) INSERT INTO `accounts` (`created_at`, `name`, `number`,
`student_id`, `updated_at`) VALUES (''2012-04-01 11:16:20'',
''acname1'',
''1111'', 4, ''2012-04-01 11:16:20'')
(0.7ms) COMMIT
Account Load (0.3ms) SELECT `accounts`.* FROM `accounts` WHERE
`accounts`.`student_id` = 4 LIMIT 1
(0.1ms) BEGIN
(0.1ms) COMMIT
Redirected to http://localhost:3000/students/4
Completed 302 Found in 11ms (ActiveRecord: 2.4ms)
Started GET "/students/4" for 127.0.0.1 at 2012-04-01 21:16:20 +1000
Processing by StudentsController#show as HTML
Parameters: {"id"=>"4"}
Student Load (0.3ms) SELECT `students`.* FROM `students` WHERE
`students`.`id` = 4 LIMIT 1
Account Load (0.4ms) SELECT `accounts`.* FROM `accounts` WHERE
`accounts`.`student_id` = 4 LIMIT 1
(0.1ms) BEGIN
(0.3ms) UPDATE `accounts` SET `student_id` = NULL, `updated_at` =
''2012-04-01 11:16:20'' WHERE `accounts`.`id` = 4
(28.6ms) COMMIT
Rendered students/show.html.erb within layouts/application (36.4ms)
Completed 200 OK in 46ms (Views: 14.5ms | ActiveRecord: 29.8ms)
*****************
After entering the account details I make it redirect to the
app/views/student/show.html.erb view because I basically want to just
update the "show" page. BUT I can see that the student_id is being
updated to NULL - why is that?
--
Posted via http://www.ruby-forum.com/.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
I think I figured it out.
It was to do with my @student.build_account in the students#show method.
(And as per my original post, I think I had that in my form_for tag).
Because I''m returning to the same page, the foreign key was continually
being ''built''.
My students controller looks likes this:
def show
@student = Student.find(params[:id])
@account = @student.account
if @account.nil?
@account = @student.build_account
end
respond_to do |format|
format.html # show.html.erb
format.json { render json: @student }
end
end
And my accounts controller looks like this:
def create
@student = Student.find(params[:student_id])
@account = @student.create_account(params[:account])
redirect_to student_path(@student)
end
end
And my app/views/students/show.html.erb is attached.
Attachments:
http://www.ruby-forum.com/attachment/7216/show.html.erb
--
Posted via http://www.ruby-forum.com/.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.