我已经搜索了这个问题的答案,并且尚未找到解决我问题的任何问题。我有一个页面显示所有用户的留言板,每个留言板都有一个“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".
。请帮忙!!我可能会因为我从一开始就处理这个问题而离开基地,我找不到任何能够为此工作的东西!
答案 0 :(得分:0)
事实证明onchange: 'this.form.submit()'
在我的表单中跳过remote: :true
部分时出现问题。希望这有助于将来的某个人!