尝试在控制器方法上集成一些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
我错过了什么吗?或者我可以不在我的控制器内执行此操作吗?
谢谢。
答案 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_slugs
和make_slugs
任务。所以还有另一个原因就是不这样做。您将为表中的每个Market
生成slu,而不仅仅是您需要的slu。
如果你看the code for make_slugs,你会发现那里没有魔法。它所做的就是以100块为单位加载模型对象,然后保存它们。
所以,这将是我尝试的第一件事。只需重新加载并保存您的模型。在那之后,我需要看一些日志来深入挖掘。