我正在尝试构建一个在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
两个问题:
搜索执行后,我的搜索查询未传递到抓取网络功能,如网址所示:
http://localhost:3000/?action=search&class=grabTweets&method=get
(搜索查询是“bridge”一词
我的代码有什么问题导致搜索查询无法正常执行。
我的控制器中的代码应该放在def home
还是def search
中,因为我希望搜索结果显示在root_path
中而不打算更改页面?
提前感谢您的帮助!我彻底难倒了。
答案 0 :(得分:0)
我认为你需要阅读一本介绍Rails的书,因为你似乎缺少很多基础知识。
您对所在页面(您似乎称之为“主页”)执行了操作,并对搜索结果执行了操作。您的表单需要调用搜索操作的网址。这看起来像这样:
<%= form_tag({:controller => "pages", :action => "search"}, {:method => "get", :class => "grabTweets"}) do %>
...
(有关form_tag方法的更多详细信息,请参阅API)
在那种状态下,它会调用搜索操作(不应该有另一个名为grabTweets
的嵌套在其中的方法 - 这没有任何意义),然后将搜索search.html.erb(可能是搜索页面)结果)。
在您的路线文件中,您需要一个家庭和搜索路线。
如果您希望在不刷新页面的情况下更新页面,则需要在表单上使用:remote => true
并使用AJAX处理响应。
如果您希望这两个页面相同,但其中一个页面包含结果,则将搜索功能移动到主页操作中,只有在填充了params [:tweets]时才调用它,或者只是让两个动作都呈现相同的模板。
我建议您阅读Rendering Guide和Controllers Guide以了解详情。