RAILS:根据路径从同一控制器渲染视图

时间:2018-03-20 14:52:13

标签: ruby-on-rails routes

我有两条路线(在我的config / routes.rb中定义)

match 'compare'     => 'front_office#search_by_id', :via => :get, :as => :front_office_compare
match 'full_report' => 'front_office#search_by_id', :via => :get, :as => :front_office_full_report

我想知道如何告诉我的控制器根据我的路线渲染视图,而不在我的网址上添加参数。

基于此Question&Answer我管理以获得我想要的结果

match 'compare'     => 'front_office#search_by_id', :via => :get, :as => :front_office_compare,     :defaults => { :render => 'compare' }
match 'full_report' => 'front_office#search_by_id', :via => :get, :as => :front_office_full_report, :defaults => { :render => 'full_report' }

在我的控制器中,我将我的行动定义为:

  def search_by_id
    render :action => (params[:render] || "full_report")
  end

但这是一个好的做法还是有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

您可以将其编写为:

,而不是为每个类别创建不同的路径以简化操作
# config/routes.rb 

get ":category", to: "front_office#search_by_id", as: 'front_office', constraints: {category: /(compare|full_report)/}

上述路线会查找/compare/full_report,这会在 front_office 控制器中调用 search_by_id 操作。

然后在控制器内执行如下操作:

def search_by_id
  render params[:category]
end

params[:category]将保存我们通过网址

传递的slug值