1

私はRuby on Railsの世界ではまったく新しいです。A と B の 2 つのクラスがあり、次のように定義しています。

class AClass < ActiveRecord::Base
  has_many :a_b_class
end

class ABClass < ActiveRecord::Base
  validates_presence_of :attr1, :attr2

  belongs_to :a_class
  belongs_to :b_class

  attr_accessible :attr1,:attr2,:a_class, b_class
end

class BClass < ActiveRecord::Base
  validates_presence_of :attr4, :attr5

  has_many :a_b_class

  attr_accessible :attr4,:attr5
end

データベースのデータなどを管理するためにactiveadminを使用しています。問題は、 activeadminを使用すると、(ABClass 関係を介して) AClass オブジェクトによって参照される BClass オブジェクトを削除できるため、http: //example.com/ にアクセスすると、ビューがnil要素のattr1にアクセスしようとしたため、ビューが失敗しました。参照されたオブジェクトを削除しないようにするために 、モデルに検証を追加するにはどうすればよいですか?

EDITED:関係を修正しました。多対多です

4

2 に答える 2

1

たとえば、記事には多くのコメントがあり、コメントには article_id があり、コメントには記事がvalidates_presence_of :article_idなく、記事を削除する場合は、「dependent=>:destroy」が必要なため、それぞれのコメントを削除する必要があります。

class Article <AR
 has_many :comments,:dependent=>:destroy
end

class Comment <AR
 belongs_to :article
 attr_accessible :article_id,....
end
于 2012-09-13T13:06:01.923 に答える
0

これで問題が解決するかどうかはわかりませんが、belongs_to 属性を BClass に追加して、それが AClass に属していることを示すことができますか?

belongs_to :a_class

また、これを行うことはできません:

validates_presence_of :b_class_id

多くのIDが存在する可能性があるため..

于 2012-09-13T13:06:22.297 に答える