Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在AJAX请求之后,页面不会重新呈现_Ruby On Rails_Ruby_Ajax - Fatal编程技术网

Ruby on rails 在AJAX请求之后,页面不会重新呈现

Ruby on rails 在AJAX请求之后,页面不会重新呈现,ruby-on-rails,ruby,ajax,Ruby On Rails,Ruby,Ajax,我在博客中的帖子可以由flairs选择。可以使用下拉菜单选择FLAIR。当我选择任何其他选项时,页面将被ajax重新加载,一切正常,但如果我按下submit按钮,它将发送空的:flair值并再次呈现页面和表格,但它发送,我看到所有帖子都是如何被选择的,但没有任何变化,为什么? 我真的很抱歉不能得到这个 #blog_controller.rb def index @blogs = Blog.order("created_at desc") if !(pa

我在博客中的帖子可以由flairs选择。可以使用下拉菜单选择FLAIR。当我选择任何其他选项时,页面将被ajax重新加载,一切正常,但如果我按下submit按钮,它将发送空的
:flair
值并再次呈现页面和表格,但它发送,我看到所有帖子都是如何被选择的,但没有任何变化,为什么? 我真的很抱歉不能得到这个

#blog_controller.rb
  def index

    @blogs = Blog.order("created_at desc")

    if !(params[:flair].blank?)
      @blogs = @blogs.where(:flair => params[:flair])
    end
    respond_to do |format|
      format.html
      format.json
    end
  end

  def blog_params
      params.require(:blog).permit(:name, :title, :content, :flair)
  end

这是因为您的请求需要JS响应,并且由于您不在控制器中处理此响应,因此它默认为HTML。除非在提交时重新加载页面,否则不会重新呈现HTML,因此即使调用了controller方法,UI中也不会发生任何事情。

Ok,我将添加
index.js.haml
,但为什么选择器可以工作呢?调试这些东西的最简单方法是在控制器方法中使用类似以下内容检查发送的请求:
raiserequest.headers.inspect
。我的预感是,你实际上是在重新加载页面,而不是实际使用Ajax,如果不进行调试,很难判断。你能告诉我更多关于
raise
?如何使用它以及在哪里可以找到文档。关于它的文档并不多,因为它只是在代码中的任何地方强制执行运行时错误的一种方法。最好用于调试目的,如果达到了不应该出现的代码部分,甚至返回500。
#index.html.haml
%h1 Listing blogs

= form_with method: :get do |f|
  = f.select :flair, @flairs, {},{onchange: "this.form.submit()"}
  = f.submit 'Clear', params: {flair: ""}

= render 'table'
%br
#_table.html.haml
%table#table
  %thead
    %tr
      %th Name
      %th Title
      %th Content
      %th Flair

  %tbody
    - @blogs.each do |blog|
      %tr
        %td= blog.name
        %td= blog.title
        %td= blog.content
        %td= blog.flair
        %td= link_to 'Show', blog
        %td= link_to 'Edit', edit_blog_path(blog)
        %td= link_to 'Destroy', blog, method: :delete, data: { confirm: 'Are you sure?' }