Как использовать помощников в рейке? - PullRequest
43 голосов
/ 20 сентября 2009

Могу ли я использовать вспомогательные методы в рейке?

Ответы [ 2 ]

66 голосов
/ 25 сентября 2009

Да, вы можете. Вам просто нужно запросить вспомогательный файл, а затем включить этот помощник в ваш файл rake (который на самом деле является вспомогательным, который мы можем включить).

Например, здесь у меня есть application_helper файл внутри app / helpers каталога, который содержит это:

module ApplicationHelper
  def hi
    "hi"
  end
end

так вот содержимое моего граблей:

require "#{Rails.root}/app/helpers/application_helper"
include ApplicationHelper

namespace :help do
  task :hi do
    puts hi
  end
end

и вот результат на моем терминале:

god:helper-in-rake arie$ rake help:hi 
hi
14 голосов
/ 06 января 2016

Как упоминалось в lfender6445, использование include ApplicationHelper, как и в ответе Арье, приведет к загрязнению области верхнего уровня, содержащей ваши задачи.

Вот альтернативное решение, позволяющее избежать этого небезопасного побочного эффекта.

Во-первых, мы должны , а не поместить наших помощников в app/helpers.Цитируя «Где я могу разместить свой код?» по адресу codefol.io:

Rails «помощники» - это очень специфичные помощники вида.Они автоматически включаются в представления, но не в контроллеры или модели.Это специально.

Поскольку app/helpers предназначен для помощников представлений, а задачи Rake не являются представлениями, мы должны поместить наших помощников в другое место.Я рекомендую lib/task_helpers.

В lib/task_helpers/application_helper.rb:

module ApplicationHelper
  def self.hi
    "hi"
  end
end

В вашем Rakefile или .rake файле в lib/tasks:

require 'task_helpers/application_helper'

namespace :help do
  task :hi do
    puts ApplicationHelper.hi
  end
end

Я не уверен, был ли изначально вопрос о включении помощников вида в задачи rake или просто "вспомогательные методы" для задач Rake.Но не является идеальным делиться вспомогательным файлом между представлениями и задачами.Вместо этого возьмите помощников, которые вы хотите использовать в и представлениях и задачах, и переместите их в отдельную зависимость, включенную как в помощник представления, так и в помощник задания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...