0

我正在尝试构建一个在 Twitter 上搜索图像的应用程序。在我到达那里之前,我需要跳过构建一个将值输入函数的工作搜索字段的令人生畏的障碍。

index.html.erb由 控制的文件中Pages controller,我有以下代码:

<%= form_tag root_path ({:controller => "pages", :action => "search", :method => "get", :class => "grabTweets" }) do %>
<%= text_field_tag :tweets, params[:tweets] %>
<% end %>

在我的Pages controller我有:

  def search

    def grabTweets
      @tweet = Twitter.search(params[:tweets] + "[pic] "+" path.com/p/", :rpp => 3, :result_type => "recent").map do |status|
      @tweet = "#{status.text}" #class = string
      @urls = URI::extract(@tweet, "http") #returns an array of strings
    end 
  end       


end

两个问题:

执行搜索后,我的搜索查询没有被传递到 grabTweets 函数中,正如 URL 所证明的那样:

http://localhost:3000/?action=search&class=grabTweets&method=get(搜索查询是单词“bridge”

我的代码有什么问题,搜索查询没有正确执行。

考虑到我希望搜索结果显示在 中并且不打算更改页面,我应该将控制器中的代码放在def homeor中吗?def searchroot_path

在此先感谢您的帮助!我完全被难住了。

4

1 回答 1

0

我认为您需要阅读一本介绍 Rails 的书,因为您似乎缺少许多基础知识。

您有一个针对您所在页面的操作(您似乎称之为“主页”)和一个针对搜索结果的操作。您的表单需要调用搜索操作的 url。看起来像这样:

<%= form_tag({:controller => "pages", :action => "search"}, {:method => "get", :class => "grabTweets"}) do %>
...

(有关form_tag 方法的更多详细信息,请参阅API )

在这种状态下,它将调用搜索操作(其中不应该有另一个称为grabTweets嵌套的方法 - 这没有意义),然后将呈现 search.html.erb(可能是搜索结果页面)。

在您的路线文件中,您需要一条既可用于主页又可用于搜索的路线。

如果您希望在不刷新页面的情况下更新页面,那么您需要:remote => true在表单上使用并使用 AJAX 处理响应。

如果您希望两个页面相同,但其中一个包含结果,则要么将搜索功能移动到主页操作中,并且仅在填充了 params[:tweets] 时才调用它,或者只让两个操作呈现相同的模板。

我建议阅读渲染指南控制器指南以了解更多信息。

于 2012-06-10T01:33:50.917 回答