我是新來的Ruby和Rails,我試圖把一個嵌套窗體,最終創建一個頁面,但也允許用戶創建個別部分內嵌提交之前這一頁。內聯表單包含兩個按鈕,一個添加一個部分,另一個刪除它。以下是我的相關文件(請讓我知道如果你需要看到任何其他的),我會列出我以後有問題:嵌套窗體不呈現或保存數據
僅供參考,我使用的寶石:Slim,Simple Form,cocoon和Bootstrap。 On Rails的4
_form.html.slim
= simple_form_for(@page, html: { class: 'form-horizontal' }) do |f|
= f.input :title, label: 'Title'
= f.input :description, label: 'Desc'
.form-group
.col-xs-10
label Parts
.form-inline
= f.simple_fields_for :parts do |part|
= render 'part_fields', f: part
.links
= link_to_add_association 'Add Part', f, :parts
= f.button :submit
_parts_fields.html.slim
= f.input :part_type, collection: ['String 1', 'String 2'], prompt: 'Part type', label: false
= f.input :part_title, placeholder: 'Part title', label: false
= f.input :part_desc, placeholder: 'Part description', label: false
= link_to_remove_association 'Remove Part', f
/models/page.rb
class Page < ActiveRecord::Base
belongs_to :project
has_many :parts
accepts_nested_attributes_for :parts
end
/模型/一部分。 rb
class Part < ActiveRecord::Base
belongs_to :page
end
條
/controllers/pages_controller.rb
class PagesController < ApplicationController
def index
@pages = Page.all
respond_to do |format|
format.html
format.json { render json: @pages }
end
end
def new
@page = Page.new
respond_to do |format|
format.html
format.json { render json: @page }
end
end
def edit
@page = Page.find(params['id'])
end
def create
@page = Page.new(page_params)
respond_to do |format|
if @page.save
format.html { redirect_to(@page) }
format.json { render json: @page, status: :created, location: @page }
else
format.html { render action: 'new' }
format.json { render json: @page.errors, status: :unprocessable_entity }
end
end
end
def update
@page = Page.find(params['id'])
respond_to do |format|
if @page.update_attributes(page_params)
format.html { redirect_to(action: 'index') }
format.json { head :ok }
else
format.html { render action: 'edit' }
format.json { render json: @page.errors, status: :unprocessable_entity }
end
end
end
def page_params
params.require(:page).permit(:title, :description, parts_attributes: [:id, :part_type, :part_title, :part_desc])
end
end # End Pages Controller
路線
resources :projects do
resources :pages
end
resources :pages
resources :parts
問題:
1)的形式沒有保存任何數據(不能編輯/更新當前頁面或創建新的)。 更新:已修復,請參閱下面我自己的回答。
2)在部分我使用collection
有一個下拉菜單,但這些測試值現在是硬編碼。我怎樣纔能有一個下拉列表填充每個字段與數據庫的列?
3)來自部分的內聯表單元素不會被呈現回主表單上。我所看到的只是「零件」標籤,並且它下面沒有任何元素。 更新:@pages.parts.build
解決了這個問題。
欣賞你們可以給我的任何幫助。
在您的控制器中,嘗試使用'@ page.parts.build'將新零件實例添加到零件集合中。 –