можно использовать методы send и public_send
class Admin::RailsLogsController < Admin::MyAdminBaseController
def index
end
def get_logs
name = params[:name]
send "show_logs_#{name}"
end
def show_logs_logs
path = File.join(Rails.root, 'log','development.log') if Rails.env.development?
path = File.join(Rails.root, 'log','production.log') if Rails.env.production?
@text = `tail -n 2000 #{path}`
render :template => "admin/rails_logs/show_logs_logs.html.haml"
end
def show_logs_sq_logs
path = File.join(Rails.root, 'log','apihub-sidekiq-development-all_nolog-0.log')
@text = `tail -n 2000 #{path}`
render :template => "admin/rails_logs/show_logs_sq_logs.html.haml"
end
def show_logs_d_sd_logs
path = File.join(Rails.root, 'log','apihub-sidekiq-development-log-0.log')
@text = `tail -n 2000 #{path}`
render :template => "admin/rails_logs/show_logs_d_sd_logs.html.haml"
end
end
Различие методов состоит в том, что public_send вызывает ТОЛЬКО публичные методы, которые находятся внутри контроллера, а send вызывает ВСЕ методы из контроллера. В примере выше можно использовать и тот и другой методы.
path = File.join(Rails.root, 'log','development.log') if Rails.env.development?
path = File.join(Rails.root, 'log','production.log') if Rails.env.production?
код выше можно заменить на одну строку path = File.join(Rails.root, 'log', Rails.env + ".log")
, где Rails.env
- название текущего окружения (development, production, etc)