【问题标题】:Relationship issue with activerecord rails与 activerecord 导轨的关系问题
【发布时间】:2012-05-29 11:50:29
【问题描述】:

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

我正在使用 devise 进行身份验证,但由于我仍然对 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'

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

提前致谢。

【问题讨论】:

  • 感谢您将我指向 @pets = admin.pets.all 但现在我收到错误 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 应用程序跟踪 |框架跟踪 | Full Trace app/controllers/pets_controller.rb:7:in `index' 我已经完成了命令“bundle exec rake:db migrate”,所以我认为 admin_id 已经是宠物的一部分,因为你可以在我的模型中看到我的模型原帖

标签: ruby-on-rails activerecord devise


【解决方案1】:

应该是:

@pets = admin.pets

你应该看看 ActiveRecord 关联指南,它很不错:http://guides.rubyonrails.org/association_basics.html

【讨论】:

    【解决方案2】:

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

    @pets = admin.pets

    【讨论】:

      【解决方案3】:

      你可以简单地做@pets = admin.pets
      对于您的错误,这表明您在 pets 表中没有 admin_id 字段 记住..如果你想 has_many 与 admin 的宠物关联,那么你需要在 pets 表中设置 admin_id

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多