respond_to没有正确呈现index.js.erb

时间:2017-07-29 16:28:41

标签: ruby-on-rails ajax

我已经搜索了这个问题的答案,并且尚未找到解决我问题的任何问题。我有一个页面显示所有用户的留言板,每个留言板都有一个“game_type”属性。我只是尝试更新所有消息而不使用ajax刷新。我已经设置了范围,我的控制器目前看起来像这样:

area

如果我的网页上只有标准链接,例如area,我的浏览器会重定向到http://localhost:3000/microposts?game_type=Mode并显示正确的结果。现在问题发生在尝试使ajax魔法发生时,我可以跳过重定向并在页面上实时渲染结果。

除此之外,我在index.html.erb视图中有这个表单:

def index
    @microposts = Micropost.where(nil).paginate(page: params[:page], per_page: 12)
    filtering_params(params).each do |key, value|
      @microposts = @microposts.public_send(key, value) if value.present?
    end
    @micropost = current_user.microposts.build 

    respond_to do |format|
        format.html { }
        format.js { }
    end

end

允许用户通过选择过滤结果。我有一个index.js.erb文件,其中包含以下行:

<%= link_to 'Mode', {controller: 'microposts', action: 'index', :game_type => 'Mode'} %>

但是,从下拉列表中选择一个值时,我的<%= form_tag microposts_path, method: :get, remote: true do %> <%= select_tag :game_type, options_for_select([['Mode', 'Mode'], ['Mode2', 'Mode2']]), onchange: 'this.form.submit()' %> <% end %> 块根本没有被点击,它将我的请求视为HTML。我发现解决此问题的唯一方法是在表单中添加$(.row.posts").html("<%= j (render @microposts) %>");` 。这种有效。首先,我遇到了一个跨源错误,我通过向控制器添加format.js来解决这个错误。现在,我的format.js块被命中,它正在调用我的index.js.erb。但是,JS调用我所拥有的文件作为文本呈现,我被重定向到只有microposts_path(:format => :js)

的空白页面

该文件中的任何内容实际上都不被视为JS。我在浏览器控制台中注意到我收到了这个错误:

protect_from_forgery except: :index

奇怪的是,我已经创建并销毁处理此问题的操作。我的application.js文件都有

$(.row.posts").html("the html of my rendered posts");

我没有必要通过其他行动传递Resource interpreted as Document but transferred with MIME type text/javascript: "http://localhost:3000/microposts.js?utf8=%E2%9C%93&game_type=Mode". 。请帮忙!!我可能会因为我从一开始就处理这个问题而离开基地,我找不到任何能够为此工作的东西!

1 个答案:

答案 0 :(得分:0)

事实证明onchange: 'this.form.submit()'在我的表单中跳过remote: :true部分时出现问题。希望这有助于将来的某个人!