Rails3,一对多关系,如何检查子模型的parent_id在保存时是否有效

时间:2010-11-25 08:31:46

标签: ruby-on-rails-3

我有两个模型,父母和孩子。父母有很多孩子,孩子有一个父母。使用has_many和belongs_to的一对多关系。当然,Child有parent_id字段。

我想检查Child的验证,如果它的parent_id有效(意味着父有这个ID)。

我认为 validates_associated 是为了这个,但在unittest中不起作用。

我是否必须创建自己的验证器或是否有更通用的方法?

2 个答案:

答案 0 :(得分:0)

为什么不在迁移中添加数据库外键约束?像

这样的东西
    class CreatePages < ActiveRecord::Migration
      def self.up
        create_table :pages do |t|
          t.references :upload, :null => false
          t.integer :number
          t.integer :position
          t.integer :color

          t.timestamps
        end

        execute "ALTER TABLE pages 
                 ADD CONSTRAINT fk_pages_upload_id
                 FOREIGN KEY (upload_id) REFERENCES uploads(id)"
      end

      def self.down
        execute "ALTER TABLE pages DROP CONSTRAINT fk_pages_upload_id"
        drop_table :pages
      end
end

这可能看起来不像是一种“Rails”的做事方式,但个人而言,我感觉数据库在Web应用程序中未得到充分利用。约束是强大的,为什么不使用它们呢!

致以最诚挚的问候,

菲利普

答案 1 :(得分:0)

您需要在子模型上同时使用validates_associatedvalidates_presence_of,以确保填充foriegn_key,并且该表中存在父模型。请参阅此处文档的说明validates_associated