Reputation: 11
I am still learning Rails, I've read some books and did some hands on at codeschool.com and now I'm trying to write my first simple app from scratch.
I'm using devise for authentication, but since i still kinda suck at rails, I haven't gotten email confirmation working so currently, for testing purposes only Admin users can take actions.
Here are my models:
[loluser@fedora models]$ ls
admin.rb pet.rb user.rb
[loluser@fedora models]$ cat admin.rb
class Admin < ActiveRecord::Base
has_many :pets
devise :database_authenticatable, :registerable, :timeoutable, :validatable,
:timeout_in => 20.minutes
end
[loluser@fedora models]$ cat pet.rb
class pet < ActiveRecord::Base
belongs_to :admin
end
[loluser@fedora models]$
In my controller, I want to display Admin[1]'s pets in the index so i have this code:
class petsController < ApplicationController
before_filter :authenticate_admin!
# GET /pets
# GET /pets.xml
def index
admin=Admin.find(1)
@pets = pet.admin.all
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @pets }
end
end
However, I am getting this error:
NoMethodError in petsController#index
undefined method `admin' for #<Class:0x7f2daa7b0258>
Rails.root: /home/loluser/dev/app2/devise_example
Application Trace | Framework Trace | Full Trace
app/controllers/pets_controller.rb:7:in `index'
Help will be appreciated and please let me know if I need to clarify something.
Thanks in advance.
Upvotes: 1
Views: 81
Reputation: 509
You can simply do @pets = admin.pets
And for your error, which says you dont have admin_id field in the pets table
Remember.. if you want has_many association with pets from admin then you need to set admin_id in pets table
Upvotes: 0
Reputation: 33636
It should be:
@pets = admin.pets
You should take a look at the ActiveRecord Associations guide, it's pretty good: http://guides.rubyonrails.org/association_basics.html
Upvotes: 2
Reputation: 12837
you don't need the .all. You have the admin instance and admin has many pets right? so just do
@pets = admin.pets
Upvotes: 0