我正在尝试生成一个 ajax 请求来调用博客 Controller 计数操作,但出现错误,并且无法找出原因。请帮我找到它。下面是有错误的代码。
blogs_controller.rb
def count
@blog = Blog.find(params[:blog_id])
@blog.increment!(:blog_count)
redirect_back(fallback_location: blogs_path)
end
show.html.erb
<button onclick="CountFun()" class="btn btn-success float-right" id="first" >Copy</button>
<script>
$('#first').click(function(e) {
e.preventDefault();
$.ajax({
type: "PUT",
url: "#{blog_count_path(@blog)}"
});
});
</script>
错误信息
ActionController::ParameterMissing(参数丢失或值为空:博客):
app/controllers/blogs_controller.rb:79:in blog_params'
app/controllers/blogs_controller.rb:45:in
阻止更新'
app/controllers/blogs_controller.rb:44:在“更新”
只是为了测试我是否以正确的方式定义了 Controller 操作,我添加了这个 link_to 按钮只是为了看看它是否有效并且它像冠军一样工作,只是我在 ajax 请求中遇到了错误。
<%= link_to 'Count', blog_count_path(@blog), method: :put, id: 'second' %>
路线.rb
resources :blogs, path: '/' do
put :count
end
最佳答案
你的问题出在与你想象的不同的地方,路径和操作是正确的,但是你的脚本没有正确的路径,因为你刚刚传递了它#{blog_count_path(@blog)}
。 erb
在那里看不到任何要解析的内容。
因此,在 show.html.erb
中,您需要确保 erb
知道您想要替换某些内容:
$.ajax({
type: "PUT",
url: "<%= blog_count_path(@blog) %>"
});
更好的方法是完全忘记脚本并直接使用 remote: true
创建一个按钮
<%= button_to "Count", blog_count_path(@blog), method: :put, remote: true %>
关于ruby-on-rails - Ajax 请求不适用于 Rails 中的 Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57005432/