ruby-on-rails - Ajax 请求不适用于 Rails 中的 Controller 操作

标签 ruby-on-rails ruby ajax controller

我正在尝试生成一个 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/

相关文章:

mysql - Rails 事件记录关联 SQL 行为

ruby-on-rails - Rails,删除查询中事件记录值周围的引号

ruby-on-rails - 尽管 URI 正确,但 Gravatar 图像未显示 - Ruby on Rails

ruby - 比较具有相同元素的三个数组的顺序

ruby-on-rails - 帮助程序中的 Rails 部分本地人

php - 使用 AJAX 和 JSON 显示来自 PHP 的 HTML 内容

c# - 为什么 updatepanel 会触发另一个 updatepanel?

ruby-on-rails - 即使我指定了配置,为什么 Unicorn 仍在寻找rackup 文件(config.ru)?

ruby - 如何判断是否支持 File.symlink

javascript - jQuery 历史插件、Google 站点地图和 SEO