2014-03-19 67 views
1

我是Rails初学者。Rails:插入资源,同时可以插入子资源

我有一个问题,但首先,这里是一个图像来解释什么,我想做的事:

Wireframe

口头:我挣扎,有一个新的页面资源,我可以在其中添加相关的子资源。

当我点击add new subresource时,我想要获取子资源的新页面。点击保存后,在字段完成后,我应该重定向回新的资源页面,我应该在里面看到新关联的子资源。

我试图插入这行代码在资源新形式:

link_to 'New Sub Resource', new_resource_sub_resource_path(@resource) 

但是当我点击,它返回类似:

No route matches {:resource_id=>nil} missing required keys: [:resource_id] 

显然,资源是不是还保存所以它抱怨,因为它没有一个ID ...这是可以解决的?如果是这样,怎么样?

回答

1

如果我是你的靴子,我会接近使用form_tag这个问题,然后,一旦在Resource#create控制器动作,我会首先创建Resource,然后通过所有的子资源循环来创建它们。

为了让所有Subresource嵌入到提交的表单中,我将使用jQuery/JS。 我创建了一个示例,可以帮助您编码您的app/views/resources/new.html.erb文件。虽然我用纯HTML/JS,我敢肯定,它可以帮助你,希望它不会太难端口ERB :)

http://jsfiddle.net/CV3tf/1/

喜欢的东西:

#app/controllers/resources_controller.rb 
def create 
    @resource=Resource.create(params[:resource]) 
    params[:subresource].each do |s| 
    #Assuming Resource has_many Subresources 
    @resource.subresources.create(s) 
    end 
end 

请注意params散列必须妥善填写的形式查看。这只是一个基本的概念脚手架。

希望它能帮助!

1

关于这个问题有一个很好的railscast,以及一个简化嵌套模型形式的宝石:cocoon

他们使用accepts_nested_attributes_for来处理主要资源和子资源的创建,并根据请求创建部分子表单。