1

私はまだ Rails を学んでいます。何冊かの本を読んだり、codeschool.com で実践したりしました。そして今、最初の単純なアプリをゼロから作成しようとしています。

認証にdeviseを使用していますが、まだレールが苦手なので、メール確認が機能していないため、現在、テスト目的で管理者ユーザーのみがアクションを実行できます。

ここに私のモデルがあります:

[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 モデル]$

私のコントローラーでは、管理者[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 Associations ガイドを参照してください。これは非常に優れています: http://guides.rubyonrails.org/association_basics.html

于 2012-05-29T11:54:15.430 に答える
0

あなたは単に行うことができます@pets = admin.pets
そして、あなたはペットテーブルにadmin_idフィールドを持っていないというエラーに対して覚えておいてください..管理者からのペットとのhas_many関連付けが必要な場合は、ペットテーブルにadmin_idを設定する必要があります

于 2012-05-29T12:53:51.370 に答える
0

.all は必要ありません。あなたには管理者インスタンスがあり、管理者には多くのペットがいますよね? だからただする

@pets = admin.pets

于 2012-05-29T11:57:22.473 に答える