我有2种型号:渲染通过AJAX嵌套属性(通过jQuery的文件上传图片上传)编辑形式
- 大厦→
has_many :building_views
- BuildingView→
belongs_to :building
我可以创建BuildingView仅适用于现有建筑物 - 通过建筑物的编辑窗体。
BuildingView具有image
和title
属性。图像通过Carrierwave上传。
工作流程:
- 我去构建
- 没有进行编辑的网页我有
file_field
,允许选择多个文件 - 我选择一些图片,他们通过
jquery-fileupload-rails
宝石(每图像创建BuildingView) 上传
- 上传后,他们出现在编辑窗体(无重新加载页面)与拇指和输入字段编辑BuildingView标题
1,2和3都可以。图像正在上传,BuildingView正在创建,并且在页面重新加载后,它们出现在具有标题编辑输入字段(其也可以被成功编辑)的建筑物的编辑形式中。 4的问题:我不能通过ajax附加BuildingView编辑表单。
这里是我的文件:
控制器/管理/ buildings_controller.rb
# other defs ...
def edit
@building = Building.find(params[:id])
end
def update
@building = Building.find(params[:id])
if @building.update_attributes(building_params)
flash[:success] = 'Woohoo!'
redirect_to admin_buildings_url
else
render :edit
end
end
# other defs ...
private
def building_params
params.require(:building).permit(:all_building_params,
building_views_attributes: [
:_destroy,
:id,
:building_id,
:image,
:title
])
end
的意见/管理/建筑/ edit.html.haml
%h1 Edit building
= form_for [:admin, @building] do |f|
= render 'admin/buildings/form', f: f
.form-element-container
.form-element.b-form-labels
.form-element.b-form-fields
= f.submit 'Edit building'
= link_to t('admin.cancel'), :back
= form_for [:admin, BuildingView.new] do |f_bv|
= f_bv.hidden_field :building_id, value: @building.id
= f_bv.file_field :image, multiple: true, name: 'building_view[image]'
views/admin/buildings/_form.html.haml
// fields for Building...
#building_views
.form-element-container
.form-element
%h2 Building views
= f.fields_for :building_views do |bv_form|
= render 'admin/buildings/form_building_views', f: bv_form
的意见/管理/建筑/ _form_building_views.html.haml
.form-element-container
.form-element.b-form-labels Image:
.form-element.b-form-fields= image_tag(f.object.image_url(:thumb)) if f.object.image
.form-element-container
.form-element.b-form-labels Title:
.form-element.b-form-fields= f.text_field :title
资产/ JavaScript的/管理/ buildings.js.coffee
jQuery ->
$('#building_view_image').fileupload(
dataType: 'script'
)
控制器/ admin/building_views_controller.rb
class Admin::BuildingViewsController < ApplicationController
def create
@building_view = BuildingView.create(building_view_params)
end
private
def building_view_params
params.require(:building_view).permit(:building_id, :image)
end
end
views/admin/building_views/create.js。HAML
- if @building_view.new_record?
== alert('Oops!');
- else
== $('#building_views').append('#{j render('admin/buildings/form_building_views')}');
我选择文件从控制台上传→错误:
ActionView::Template::Error (undefined local variable or method `f' for #<#<Class:0x007ffaa52faad8>:0x007ffaa7393970>):
所以我需要通过f
,当我绘制编辑形式的意见/管理/ building_views /创建。 js.haml。
但我无法弄清楚如何。我想:
j render('admin/buildings/form_building_views', f: @building_view)
但:
ActionView::Template::Error (undefined method `object' for #<BuildingView:0x007ffaa738a348>):