rails has_many给出了未定义的方法' / destroy不删除外键

时间:2014-08-28 12:00:39

标签: ruby-on-rails ruby-on-rails-3 activerecord has-many

我对has_many有一点问题,我不知道我错了,在这里搜索还没有给我答案。

我正在编写一个小型应用程序来管理各方。因此,有一个模范人为在党帮助的人

class Person < ActiveRecord::Base
  has_many :sections
end

一个模型部分来管理不同的地方(一个射击栏,一个获取食物的地方等)

class Section < ActiveRecord::Base
  belongs_to :person
  has_many :shifts
end

我使用的路线很简单(他们工作)

resources :people
resources :sections

我的迁移如下

class CreatePeople < ActiveRecord::Migration
def change
create_table :people do |t|
  t.string :vname
  t.string :nname
  t.string :mail

  t.timestamps
end
end
end

class CreateSections < ActiveRecord::Migration
def change
create_table :sections do |t|
  t.string :name
  t.text :text
  t.integer :person_id

  t.timestamps
end
end
end

我遇到的问题是:据我所知,has_many我现在应该可以使用

@stuff=Person.sections

获取某个人工作的所有部分。

然而,这给了我“未定义的方法`部分'用于#”。当我摧毁一个人并且部分对象中的外键仍然存在时,问题实际上发生了,而我认为rails会将它们设置为NULL,例如。

@person=Person.find(8)
@person.destroy

的某个地方结束了
couldn't find person with id=8

获取部分

的节目动作
def show
  @section=Section.find(params[:id])
  if @section.person_id
    @person=Person.find(@section.person_id)
  end
end

我不知道该怎么办,或者我错过了一些迁移。 Rails似乎并不承认这种一对多的关系。我已经检查了文档和东西,但找不到区别。也许你可以帮忙。

非常感谢,sven

1 个答案:

答案 0 :(得分:2)

您可以添加依赖关系规则,例如:

class Person < ActiveRecord::Base   
  has_many :sections, dependent: :destroy
  ...

这将在人员摧毁之前摧毁人物部分。

看起来像你需要:

class Person < ActiveRecord::Base   
  has_many :sections, dependent: :nullify