1

我仍在学习 Rails,我已经阅读了一些书籍并在 codeschool.com 上进行了一些实践,现在我正在尝试从头开始编写我的第一个简单应用程序。

我正在使用设计进行身份验证,但由于我仍然对 Rails 有点失望,所以目前我还没有收到电子邮件确认,出于测试目的,只有管理员用户可以采取行动。

这是我的模型:

[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 模型]$

在我的控制器中,我想在索引中显示 Admin[1] 的宠物,所以我有以下代码:

  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

但是,我收到此错误:

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'

帮助将不胜感激,如果我需要澄清一些事情,请告诉我。

提前致谢。

4

3 回答 3

2

它应该是:

@pets = admin.pets

你应该看看 ActiveRecord 关联指南,它非常好: http: //guides.rubyonrails.org/association_basics.html

于 2012-05-29T11:54:15.430 回答
0

你不需要.all。你有管理员实例,管理员有很多宠物,对吧?所以就这样做

@pets = admin.pets

于 2012-05-29T11:57:22.473 回答
0

你可以简单地@pets = admin.pets
为你的错误做,它说你在宠物表中没有 admin_id 字段记住..如果你想 has_many 与管理员的宠物关联,那么你需要在宠物表中设置 admin_id

于 2012-05-29T12:53:51.370 回答