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.
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
I’m guessing your pet object doesn’t have an admin method?
Thanks for pointing me to @pets = admin.pets.all but now I'm getting the
error
ActiveRecord::StatementInvalid in PetsController#index
SQLite3::SQLException: no such column: pets.admin_id: SELECT
"pets".* FROM "pets" WHERE ("pets".admin_id = 1)
Rails.root: /home/heptagone/dev/app2/devise_example
Application Trace | Framework Trace | Full Trace
app/controllers/pets_controller.rb:7:in `index'
I have already done the command "bundle exec rake:db migrate" so I'd
thing that admin_id would already part of pets as you can see my models
in my original post
The error message says that the pets table does not have a column “admin_id”. Have you checked to see whether your pets table has a column called admin_id? What does your migration for the pets table look like?
Hello Jeremy, thanks for providing me your experience and quick
response!
You’re welcome! So you know, it’s customary to post your responses in the relevant place of a thread, rather than top-posting. It makes the conversation easier to follow.
Here is my migration, sorry for being such a newb…