Ошибка в nested_form при отображении страницы после отправки формы с remotipart
Приложение:
В моем проекте Rails (v3.2.17) у меня есть классы:
class User < ActiveRecord::Base
has_many :photos, dependent: :destroy
accepts_nested_attributes_for :photos, :allow_destroy => true
attr_accessible photos_attributes
а также:
class Photo < ActiveRecord::Base
belongs_to :user
attr_accessible :name, :picture
has_attached_file :picture, :styles => { :medium => "370x370#", :thumb => "120x120#" }
validates :name, :presence => true
я использую paperclip
обрабатывать загрузку изображений.
В пользовательской форме я использую драгоценный камень nested_form
динамически создавать вложенные формы фото. Мой пользовательский вид выглядит так:
<%= simple_nested_form_for(@user, :remote => true) do |f| %>
<%= f.error_notification %>
<div id="photos">
<%= f.fields_for(:photos) %>
</div>
<div class="add_new_photo_container">
<%= f.link_to_add(:photos, {:id => "add_new_photo", :data => {:target => "#photos"}}) do %>
Add photo
<% end %>
</div>
<%= f.button(:submit, @user.new_record? ? 'create' : 'update', :id => "submit_form") %>
<% end %>
Внутри формы для nested_attribute фото у меня есть file_field. Поскольку я хочу отправить форму пользователя с помощью Ajax, а файлы не могут быть отправлены через Ajax, я также использую remotipart
драгоценный камень, чтобы справиться с этим. мой photo_fields
это так:
<%= f.link_to_remove(:class => "remove_photo_form") do %>
<%= f.file_field :picture, accept: 'image/png,image/gif,image/jpeg,image/jpg', :class => 'upload_picture' %>
<%= f.input(:name) %>
Мой контроллер имеет метод создания:
def create
@user = User.new(params[:user])
if @user.save
respond_to do |format|
format.js {}
end
else
respond_to do |format|
format.js { render 'reload_form' }
end
end
end
А также reload_form.js.erb
идет как:
$('#user_form').replaceWith("<%= j (render 'users/form') %>");
Что работает:
Успешный случай, когда я отправляю Пользователя много фотографий и указываю имя для каждой фотографии, работает отлично.
Случай ошибки, когда я отправляю фотографии без имени (необходимо указать имя), но и без файла изображения, работает нормально. Форма перезагрузки и ошибки показаны в моем HTML. Это журнал Rails:
Started POST "/en/users" for 127.0.0.1 at 2015-06-23 22:31:18 -0300
Processing by UsersController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"RmKyaIap0fJlIECa65oj0PLncYqxyAJ0OzPc7H3eiZg=", "user"=>{"photos_attributes"=>{"0"=>{"_destroy"=>"false", "name"=>""}, "1"=>{"_destroy"=>"false", "name"=>""}}, "starts_at"=>"", "finishes_at"=>""}, "commit"=>"Create", "locale"=>"en"}
Что не работает:
Случай ошибки, когда я отправляю фотографии без имени, но загружаю файл изображения, НЕ работает.
В этом случае, remotipart
действует, чтобы представить картину в Ajax-манере. Но есть какая-то ошибка при перезагрузке f.link_to_add
от nested_form
, Ошибки не отображаются, но форма также не перезагружается.
И это журнал Rails Post, когда он не работает:
Started POST "/en/users" for 127.0.0.1 at 2015-06-23 22:31:53 -0300
Processing by UsersController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"RmKyaIap0fJlIECa65oj0PLncYqxyAJ0OzPc7H3eiZg=", "user"=>{"photos_attributes"=>{"0"=>{"_destroy"=>"false", "name"=>"", "picture"=>#<ActionDispatch::Http::UploadedFile:0x43d5a40 @original_filename="avatar.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[photos_attributes][0][picture]\"; filename=\"avatar.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:C:/Users/EVEDOV~1/AppData/Local/Temp/RackMultipart20150623-1552-ka9clf>>}, "1"=>{"_destroy"=>"false", "name"=>""}}, "starts_at"=>"", "finishes_at"=>""}, "commit"=>"Create", "remotipart_submitted"=>"true", "X-Requested-With"=>"IFrame", "X-Http-Accept"=>"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01", "locale"=>"en"}
Когда я включаю выставление всех видов ошибок в консоли Firebug, вот что я вижу:
Handler function DebuggerProgressListener.prototype.onStateChange threw an exception: [Exception... "Component returned failure code: 0x80004002 (NS_NOINTERFACE) [nsIWebProgress.DOMWindow]" nsresult: "0x80004002 (NS_NOINTERFACE)" location: "JS frame :: resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/devtools/server/main.js -> resource://gre/modules/devtools/server/actors/webbrowser.js :: DPL_onStateChange :: line 1439" data: no]Line: 1439, column: 0
DevToolsUtils.js (linha 60)
<Sistema>
[Exception... "Component returned failure code: 0x80004002 (NS_NOINTERFACE) [nsIWebProgress.DOMWindow]" nsresult: "0x80004002 (NS_NOINTERFACE)" location: "JS frame :: chrome://browser/content/browser.js :: TabsProgressListener.onStateChange :: line 13564" data: no]
tabbrowser.xml (linha 490)
TypeError: can't access dead object
htmlPanel.js (linha 1082, col 16)
<Sistema>
Кто-нибудь сталкивался с подобной проблемой и знает, как ее исправить?
Я также пытался заменить nested_form
от cocoon
жемчужина, но я попадаю в ту же проблему.