0

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

本质上,我有一个 Market 对象,它的 URL 基于自定义方法创建。由于它基于自定义方法,因此当 Market 对象更新时,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

我错过了什么吗?或者我可以不在我的控制器内这样做吗?

谢谢你。

4

2 回答 2

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

Try it...
于 2010-09-24T20:00:26.437 回答
0

从控制器调用 rake 任务来更新模型对象是很糟糕的。查看该 rake 任务的代码,您可以看到它redo_slugs只是运行delete_slugsandmake_slugs任务。所以还有另一个理由不这样做。您将为Market表中的每个生成 slug,而不仅仅是您需要的那个。

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

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

于 2010-09-24T20:04:49.110 回答