0

我有一个我自己无法解决的问题,所以我很感激任何帮助。它涉及我的 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

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

4

1 回答 1

0

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

$(myForm).submit -> false

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

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

于 2012-12-21T12:36:01.923 回答