【问题标题】:Rails parent child form example preventing mass assignmentRails父子表单示例防止批量分配
【发布时间】:2012-05-30 12:15:22
【问题描述】:

我使用 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 来了解我的父母。我还没有找到一个很好的工作示例。

【问题讨论】:

    标签: ruby-on-rails mass-assignment


    【解决方案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
    

    【讨论】:

    • 我确实阅读了guides.rubyonrails.org/routing.html#nested-resources,但我遵循了一条规则:资源的嵌套深度不应超过 1 级,因此我放弃了嵌套资源。
    • @TomaszKalkosiński 更新了答案。
    • 这解决了在创建图书时我的 URL 中有 parent_id 的问题。太糟糕了,这条路线的做法并没有广泛流行。谢谢。
    猜你喜欢
    • 2013-07-26
    • 2012-08-17
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2011-01-11
    • 1970-01-01
    相关资源
    最近更新 更多