在rails中调用Rake :: Task导致“不知道如何构建任务......”

时间:2010-09-24 19:39:38

标签: ruby-on-rails controller rake friendly-id

尝试在控制器方法上集成一些friendly_id gem功能。

基本上,我有一个Market对象,它的URL是基于自定义方法创建的。由于它基于自定义方法,因此当friendly_id更新市场对象时,{}不会更新URL。 Friendly_id确实提供了redo_slugs rake任务,但是当我从我的控制器中调用它时,它告诉我它无法构建任务。在外面运行命令就可以了。

我的控制器的代码如下所示:

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 :(得分:0)

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

Try it...

答案 1 :(得分:0)

从控制器调用rake任务来更新模型对象非常糟糕。查看the code for that rake task,您可以看到redo_slugs只是在运行delete_slugsmake_slugs任务。所以还有另一个原因就是不这样做。您将为表中的每个Market生成slu,而不仅仅是您需要的slu。

如果你看the code for make_slugs,你会发现那里没有魔法。它所做的就是以100块为单位加载模型对象,然后保存它们。

所以,这将是我尝试的第一件事。只需重新加载并保存您的模型。在那之后,我需要看一些日志来深入挖掘。