Rails父子表单示例阻止批量分配

时间:2012-05-30 12:15:23

标签: ruby-on-rails mass-assignment

我使用rails 3.2,我想阻止大规模分配。我有亲子关系。

class Parent < ActiveRecord:Base
    has_many :children
    attr_accessible :name
end
class Child < ActiveRecord:Base
    belongs_to :parent
    attr_accessible :title
end

在我的routes.rb子资源中没有嵌套在父资源中。现在我有一个链接来创建一个new_child_path(@parent.id)的新孩子。这会将我引导至localhost:3000/child/new?parent_id=1并最终进入new行动:

def new
    @child = Child.new
    @parent = Parent.find(params[:parent_id])
    @child.parent = @parent
end

我的问题是:如何为子实体编写_form.html.erb?我无法将f.hidden_field用于parent_id,因为在我的创建操作中,由于批量分配,它会崩溃。另一方面,当我拯救孩子时,我需要通过parent_id来了解我的父母。我没有找到一个好的工作实例。

1 个答案:

答案 0 :(得分:1)

您应该阅读Rails的嵌套资源。

一些链接:

http://railscasts.com/episodes/139-nested-resources

- 编辑1 -

根据您没有多个嵌套级别的评论,您还可以进行以下路线配置:

resources :grandparents do
    resources :parents
end

resources :parents do
    resources :children
end

这样,您仍然可以拥有父子关系,而无需多层嵌套的开销。您还可以命名控制器以保持清洁,例如:

resources :grandparents do
    resources :parents, :controller => "grandparent/parent"
end

resources :parents do
    resources :children
end