【问题标题】:Form interferes with rails routes形式干扰铁路路线
【发布时间】:2012-12-21 12:03:46
【问题描述】:

我有一个自己无法解决的问题,希望能提供任何帮助。它涉及我的 Rails 应用程序,其中包含用户身份验证。

问题是,我想要一个搜索功能的输入表单,将输入发布到处理搜索查询的新页面。 但它不起作用,因为 Rails 有点认为,POST 属于整个用户身份验证,并将我重定向到登录页面。

所以问题是,我如何将这个输入表单与其他输入表单区分开来。我想我可能需要一个新的搜索控制器,但整个搜索不是由 Rails 处理的,而是由 JavaScript 处理的。

这里有一些细节:

在 routes.rb 中:

controller :sessions do
  get 'login' => :new
  post 'login' => :create
  delete 'logout' => :destroy
  get 'logout' => :destroy
end

以及application.html.erb中的表单:

<div class="btn-group" style="height: 20px;">
<form action="/#search" method="post">
    <input id="search" type="text" class="search-query span2" placeholder="Search Our Database">
    </form>
</div>   

以及处理表单的 JavaScript/CoffeeScript(调用 'URL/#search' 时会调用此函数:

displaySearch = ->

  str = $("#search").val()

  html = "You have just searched for "
  html += "<strong>" + str + "</strong>"

  $("#appCanvas").html html

非常感谢您提供的有关如何解决此问题的提示:) 非常感谢,祝您有美好的一天!

【问题讨论】:

    标签: jquery ruby-on-rails forms post routes


    【解决方案1】:

    我想你想要的是防止表单被提交?然后你只需要停止事件或在你的回调方法中返回 false。

    $(myForm).submit -> false
    

    恐怕您已尝试使用 /#search 作为实际发布的 URL。您应该知道锚点 (#search) 没有被传输到服务器,因此 Rails 无法路由它并假设对当前 URL 执行正常的 POST 操作。

    如果您想通过 Javascript 处理它,请使用 AJAX 实现它。否则你真的应该为此创建一个新的控制器/动作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 2021-05-05
      • 1970-01-01
      相关资源
      最近更新 更多