我是新来的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'将新零件实例添加到零件集合中。 –