Invoking Rake :: Задача в рельсах вызывает "Не знаю, как построить задачу ..." - PullRequest
0 голосов
/ 24 сентября 2010

Попытка интегрировать некоторые функциональные возможности friendly_id в метод контроллера.

По сути, у меня есть объект Market, URL которого создан на основе пользовательского метода.Так как он основан на пользовательском методе, friendly_id не будет обновлять URL при обновлении объекта Market.Friendly_id предлагает задачу rake redo_slugs, но когда я вызываю ее из моего контроллера, он говорит мне, что не может построить задачу.Запуск команды снаружи работает просто отлично.

Код для моего контроллера выглядит следующим образом:

require 'rake'
require 'friendly_id'

class Admin::MarketsController < ApplicationController
  def update
    if @market.update_attributes(params[:market])
      rake_market_slugs
    end
  end

  protected
    def rake_market_slugs
      Rake::Task["friendly_id:redo_slugs MODEL=Market"].invoke
    end
end

Я что-то упустил?Или я могу просто не делать этого внутри моего контроллера?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2010

Вызов грабли из контроллера для обновления модельного объекта ужасен.Посмотрев код для этой задачи rake , вы увидите, что redo_slugs просто выполняет задачи delete_slugs и make_slugs.Так что есть еще одна причина не делать этого.Вы будете генерировать слагов для каждого Market в вашей таблице, а не только для того, что вам нужно.

Если вы посмотрите код для make_slugs , вы увидите, что нетмагия там.Все, что он делает, это загружает объекты вашей модели в блоки по 100, а затем сохраняет их.

Итак, это будет первое, что я попробую.Просто перезагрузите и сохраните вашу модель.После этого мне нужно будет посмотреть несколько журналов, чтобы копать глубже.

0 голосов
/ 25 сентября 2010
def rake_market_slugs
   MODEL="Market"
  Rake::Task["friendly_id:redo_slugs"].invoke(MODEL)
end

Try it...
...