【发布时间】:2018-10-25 17:16:28
【问题描述】:
我的主页上有一个按钮。当点击它时,它会向forms_controller 发出 POST 请求,以便创建一个新表单。
我的按钮:
<%= link_to 'Add form', forms_path, id: 'add_form_button',
class: 'btn btn-primary',
method: :post, remote: true %>
请求完成后,控制台会记录一条消息:
<script>
$('#add_form_button').on('ajax:complete', function(){
console.log('Request complete!');
});
</script>
这是动作:
def create
current_user.forms.create
end
我的路线是这样定义的:
Rails.application.routes.draw do
devise_for :users
root to: 'home#show'
resources :forms, except: [:index]
get 'user_forms' => 'partials#user_forms'
end
它按预期工作。每次单击按钮时,都会创建一个新表单并将消息记录到控制台。
但是,在创建表单之后,我想重新加载一个 div,以便我可以看到新创建的表单与其他表单一起列出:
$('#add_form_button').on('ajax:complete', function(){
console.log('Request complete!')
var user_forms = '#user_forms';
$(user_forms).load('user_forms',function(){
document.getElementById('add_form_button').scrollIntoView();
});
});
在.load('user_forms')... 的情况下,user_forms 是我为返回部分而创建的操作的路由:
class PartialsController < ApplicationController
def user_forms
render partial: 'home/user_forms'
end
end
第一次单击该按钮时,它按预期工作:创建一个新表单,将消息记录到控制台,并使用部分重新加载 div,以便它列出新创建的表单。
但它不适用于后续点击。每次单击按钮时都会创建新表单,但不会重新加载 div,也不会将消息记录到控制台。我还在 Rails 终端中看到以下错误:
No template found for FormsController#create, rendering head :no_content
Completed 204 No Content in 454ms (ActiveRecord: 2.6ms)
我知道我没有在 forms_controller#create 中定义明确的响应,但我不明白为什么它第一次有效,而以后无效。是什么阻止了它第二次工作?
【问题讨论】:
-
嗨,我假设你使用 Rails 5?如果没有提供模板,它默认返回 204。请参阅blog.bigbinary.com/2016/07/03/… 了解更多信息。这本身不是错误。除此之外,我认为您提供的内容没有任何其他问题。您能发布
routes.rb中的内容吗?还有没有其他js代码与DOM交互或者监听ajax事件? -
这是页面上唯一的JS。我将编辑我的问题以添加路线。
标签: ruby-on-rails ujs