试图在控制器方法上集成一些友好的宝石功能。

从本质上讲,我有一个市场对象,该对象的URL基于自定义方法。由于它是基于自定义方法的 友好_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

我想念什么吗?还是可以在控制器内部不这样做?

谢谢你。

有帮助吗?

解决方案

从控制器调用耙子任务以更新模型对象是可怕的。看着 该耙任务的代码, ,你可以看到 redo_slugs 只是运行 delete_slugsmake_slugs 任务。因此,还有另一个原因不这样做。您将为每个人生成sl Market 在您的桌子中,而不仅仅是您需要的。

如果你看 make_slugs的代码 您可以看到那里没有魔法。它所做的只是将模型对象加载到100个块中,然后保存它们。

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

其他提示

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

Try it...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top