2014-03-19 100 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來處理主要資源和子資源的創建,並根據請求創建部分子表單。