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

时间:2013-09-05 17:08:13

标签: ruby-on-rails search redirect params

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

我目前在我看来有这个:

<%== search_field_tag(:symbol, "Enter symbol") %>
<%== submit_tag ("Search") %>

这是我的路线:

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

3 个答案:

答案 0 :(得分:2)

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 %>

答案 1 :(得分:0)

#company控制器方法结束时,你可能会做类似这样的事情

render "#{params[:symbol]}"

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

同时拥有一个与公司名称相同的模板文件,例如google.html.erb

试一试!

答案 2 :(得分:0)

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

完整示例

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

同样在你的情况下,我建议在路线http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments

中使用asteriks而不是冒号