Rails:插入资源,同时能够插入子资源

时间:2014-03-19 15:57:55

标签: ruby-on-rails ruby-on-rails-4 nested

我是Rails的初学者。

我遇到了问题,但首先,这是一张图片来解释我想要做的事情:

Wireframe

verbally :我正在努力为资源创建一个新页面,我可以在其中添加-inide it-相关的子资源。

当我点击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 ...这是可以解决的吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分: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 :(得分:1)

在这个主题上有一个很好的railscast,以及一个简化嵌套模型表单的宝石:cocoon

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