(Rails)远程表单在更新时以.js响应,但不在创建

时间:2016-10-19 14:06:45

标签: javascript ruby-on-rails ajax respond-to remote-forms

我的Rails应用程序中有一个简单的远程表单逻辑,用AJAX响应我的控制器的新操作,创建,编辑和更新操作。我的form_for...remote => true以format.js响应,但不响应我成功的创建操作。我对所有使用相同的form-partial,我的update-action以.js响应,只有在保存不成功时,我的create-action才会响应.js。如果我为新项目提交了有效表单,那么应用程序会抛出 ActionController :: UnknownFormat 错误。 这怎么只涉及成功的创造行动?

我有<%= javascript_include_tag 'application' %><%= csrf_meta_tags %>,下面是我的代码:

形部分:

# variable remote_form is true
<%= form_for(shop_item, :remote => remote_form, :authenticity_token => true) do |f| %>
...
<% end %>

控制器:

def create
  @shop_item = ShopItem.new(shop_item_params)
  if @shop_item.save
    respond_to do |format|
      format.js do
        flash.now[:success] = "New Item #{@shop_item.title} created"
      end
    end
  else
    respond_to do |format|
      format.js { render 'new' }
    end
  end
end

def edit
  @shop_item = ShopItem.find(params[:id])
  respond_to do |format|
    format.js
  end
end

def update
  @shop_item = ShopItem.find(params[:id])
  if @shop_item.update_attributes(shop_item_params)
    @shop_item.reload
    respond_to do |format|
      format.js do
        flash.now[:success] = "Updated #{@shop_item.title}"
      end
    end
  else
    respond_to do |format|
      format.js { render 'edit' }
    end
  end
end

create.js.erb:

if ($('#flashes').length > 0) {
  $('#flashes').replaceWith('<%= j(render :partial => "shared/flashes") %>');
} else {
  $('#session').append('<%= j(render :partial => "shared/flashes") %>');
}

$('#shop-items').prepend('<%= j(render @shop_item) %>');

服务器:

ActionController::UnknownFormat (ActionController::UnknownFormat):    
app/controllers/shop_items_controller.rb:20:in `create'
...

谢谢!

0 个答案:

没有答案