pringles
pringles

Reputation: 11

Relationship issue with activerecord rails

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

Answers (3)

Chirag Shah
Chirag Shah

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

Agis
Agis

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

jamesc
jamesc

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

Related Questions