我有两条路线(在我的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
但这是一个好的做法还是有更好的方法呢?
答案 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]
将保存我们通过网址