Skip to content

Instantly share code, notes, and snippets.

@elvisgiv
Last active April 20, 2016 12:28
Show Gist options
  • Save elvisgiv/c95c6767639d043af97ae3adf562b14a to your computer and use it in GitHub Desktop.
Save elvisgiv/c95c6767639d043af97ae3adf562b14a to your computer and use it in GitHub Desktop.

Для вызова методов внутри метода в ОДНОМ контроллере

можно использовать методы 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)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment