Rails - Чистый способ вызова метода модели в response_to по-разному в зависимости от формата - PullRequest
1 голос
/ 06 марта 2012

У меня есть такой код:

respond_to do |format|
 format.html { @all_activities = current_user.recent_activities(@size_per_page,params[:start],nil) }
 format.csv { @all_activities = current_user.recent_activities(nil,params[:start],nil); build_activity_csv }
 format.xls { @all_activities = current_user.recent_activities(nil,params[:start],nil); 
   send_data(build_excel_all, :filename => "#{Time.now.strftime('%Y-%m-%d')}_Activity_All.xls", :type => "application/xls", :disposition => 'attachment')
   }
   format.js { @all_activities = current_user.recent_activities(@size_per_page,params[:start],nil) }
   format.pdf { @all_activities = current_user.recent_activities(nil,params[:start],nil); prawnto :filename => "#{Time.now.strftime('%Y-%m-%d')}_Activity_All", :inline => false 
}
end

Как видите, я вызываю один и тот же метод в разных форматах, но в некоторых случаях я использую переменную @ size_per_page и иногда я называю метод с nil .

Кто-нибудь порекомендует лучший, более чистый или неповторяющийся способ сделать это?

Спасибо

1 Ответ

0 голосов
/ 06 марта 2012

Я бы разделил этот вызов на функцию, но это только я.

Вот как я бы это сделал:

respond_to do |format|
  format.html { set_all_activities(@size_per_page) }
  format.js { set_all_activities(@size_per_page) }
  format.csv do
    set_all_activities(nil)
    build_activity_csv
  end
  format.xls do 
    set_all_activities(nil)
    send_data(
      build_excel_all, 
      :filename    => "#{Time.now.strftime('%Y-%m-%d')}_Activity_All.xls",
      :type        => "application/xls",
      :disposition => 'attachment')
  end
  format.pdf do 
    set_all_activities(nil)
    prawnto(
      :filename => "#{Time.now.strftime('%Y-%m-%d')}_Activity_All",
      :inline   => false)
  end
end


def set_all_activities(size)
  @all_activities = current_user.recent_activities(size, params[:start], nil)
end

Я предполагаю params[:start] и последний nil аргумент последовательный, верно?

...