我有两个模型,父母和孩子。父母有很多孩子,孩子有一个父母。使用has_many和belongs_to的一对多关系。当然,Child有parent_id字段。
我想检查Child的验证,如果它的parent_id有效(意味着父有这个ID)。
我认为 validates_associated 是为了这个,但在unittest中不起作用。
我是否必须创建自己的验证器或是否有更通用的方法?
答案 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_associated
和validates_presence_of
,以确保填充foriegn_key,并且该表中存在父模型。请参阅此处文档的说明validates_associated