Ruby on Rails:如何根据search_field中的post params重定向页面?

我正在开发一个小股票市场应用程序,用户可以根据股票代码查找公司股票信息。 用户在搜索字段中发布了:symbol param后,应将其重定向到相应的“公司”页面(如华尔街日报,雅虎财经,Google财经等)。 我现在能够用符号手动输入路线,一切正常。 例如,localhost:9292 / company / GOOG。 我是一个总菜鸟,所以任何帮助都会非常感激。 谢谢!

我目前在我看来有这个:

  

这是我的路线:

 get "/company/:symbol" => "main#company" post "/company/:symbol" => "main#company_post" 

编辑:我正在使用MarketBeat gem来提取数据,但我也有一个Company表,其中我有列符号和名称。 这是我的控制器:

 class MainController < ApplicationController def index render :index and return end def company @name = MarketBeat.company params["symbol"] @symbol = MarketBeat.symbol params["symbol"] @price = MarketBeat.last_trade_real_time params["symbol"] @change = MarketBeat.change_and_percent_change params["symbol"] @volume = MarketBeat.volume params["symbol"] @days_range = MarketBeat.days_range params["symbol"] @eps = MarketBeat.earnings_to_share params["symbol"] @pe = MarketBeat.pe_ratio params["symbol"] @stock_exchange = MarketBeat.stock_exchange params["symbol"] market_cap = MarketBeat.market_capitalization params["symbol"] # @market_cap is rounded to billions @market_cap = market_cap.to_i / 1000 render :company and return end 

在您的main#company_post方法中,输入以下内容:

 redirect_to "/company/#{params[:symbol]}" 

所以路线应该是:

 get "/company/:symbol" => "main#company" post "/company" => "main#company_post" 

控制器:

 def company_post redirect_to "/company/#{params[:symbol]}" end 

风景:

 <%= form_tag("/company", method: :post) do %> <%= search_field_tag(:symbol, "Enter symbol") %> <%= submit_tag ("Search") %> <% end %> 

#company控制器方法的最后,你可能会做这样的事情

 render "#{params[:symbol]}" 

要么

 render partial: "#{params[:symbol]}" 

以及具有与公司相同名称的模板文件,例如google.html.erb

试试看!

我制作看起来几乎像你的任务的简单搜索系统

完整的例子

routes.rb

  post 'search' => 'vids#prepare_search', as: :prepare_search_vids get 'search(/*query)' => 'vids#search', as: :search_vids 

vids_controller.rb

  # GET /search(/*query) def search @results = Title.search params[:query] if search_query? if @results.count == 1 flash[:notice] = I18n.t 'vids.search.signle_result' redirect_to @results[0].vid end @query = params[:query] end # POST /search def prepare_search query = params[:q] ? params[:q] : '' redirect_to search_vids_path(query) end private def search_query? params[:query] and !params[:query].blank? end 

在你的情况下,我建议在路线中使用asteriks而不是冒号http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments