2017-12-18 19 views
1

スプレッドシートにエクスポートするオプションがあるフォームがありますが、私のページのレポートと同じ現在のパラメータ(フィルタ)を持つスプレッドシートが必要です。このような 何か:私はこのようにそれを行うことができた現在のすべてのパラメータをパスに送信するにはどうすればよいですか?

<a href="<%= reports_orders_path(params, format: 'xlsx') %>"> 
    <span><i class="fa fa-file-excel-o"></i></span> 
    <%= t '.export_xlsx' %> 
    </a> 

<a href="<%= reports_orders_path(
    "by_event" => @event.id.to_s, 
    "by_document" => params[:by_document], 
    "by_status" => params[:by_status], 
    "by_method" => params[:by_method], 
    "by_date" => params[:by_date], 
    "by_period_init" => params[:by_period_init], 
    "by_period_end" => params[:by_period_end], 
    format: 'xlsx') %>"> 
    <span ><i class="fa fa-file-excel-o"></i></span> 
    <%= t '.export_xlsx' %> 
    </a> 

しかし、これは感じているので、乱雑に見えます。

現在のすべてのパラメータを取得して自分のパスに適用する方法がありますか?マークアップをクリーンアップする

+0

あなたは*あなたの方法にすべての*のparamsのようにキーワード引数を詰め込むしたい場合は、 'report_orders_path(by_eventとしてそれを行うことができます:event.id.to_s @、フォーマット:「XLSX '、** params) ' Ruby 2以降が必要です。 – user1934428

答えて

1
# x_controller.rb 
def action 
    [...] #your code 
    @filters = report_filters 
end 

def report_filters 
    extract_fields = params.keys - ["_method", "authenticity_token", "commit", "controller", "action"] 

    { format: :xlsx, by_event: @event.id }.merge(params.slice(*extract_fields)) 
end 

例ですか?

私は時間がたつにつれてそれらを維持することができず、私の経験から大きな技術的負債になりがちであるため、ヘルパーは絶対に嫌いです。

EDIT:ダイナミックのparams抽出

+0

Worked!ありがとうございました –

0

一つの方法はそうのように、ビューヘルパーへの希望のparamsを抽出することができます:

# app/helpers/application_helper.rb 

def filter_params 
    { 
    by_event: @event.id.to_s, 
    by_document: params[:by_document], 
    by_status: params[:by_status], 
    by_method: params[:by_method], 
    by_date: params[:by_date], 
    by_period_init: params[:by_period_init], 
    by_period_end: params[:by_period_end], 
    format: 'xlsx' 
    } 
end 

次にビューで、のparamsを移入するためのヘルパーメソッドを呼び出します

# app/views/your/view/path.html.erb 

<%= link_to reports_orders_path(filter_params) do %> 
    <span><i class="fa fa-file-excel-o"></i></span> 
    <%= t '.export_xlsx' %> 
<% end %> 

これは役に立ちます。

+0

それはそれを行う良い方法です!それは静的なままですが、これは私のアプリがより多くのフィルタを必要とする可能性があるので私の理想的な解決策ではありません。 –

+0

ああ、おそらく、 'request'の[query_parameters](http://guides.rubyonrails.org/action_controller_overview.html#path-parameters-query-parameters-and-request-parameters)を参考にすると役に立つかもしれません。 – Zoran

関連する問題