レーキを呼び出す::レールでのタスクは「タスクを構築する方法がわからない…」
-
05-10-2019 - |
質問
ControllerメソッドにFriendly_id GEM機能を統合しようとしています。
基本的に、カスタムメソッドに基づいて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
私は何かが足りませんか?または、コントローラー内でこれを行うことはできませんか?
ありがとうございました。
解決
モデルオブジェクトを更新するためにコントローラーからレーキタスクを呼び出すことはひどいものです。見つめている そのレーキタスクのコード, 、あなたはそれを見ることができます redo_slugs
単に実行しています delete_slugs
と make_slugs
タスク。したがって、これをしない別の理由があります。あなたはすべてのためにナメクジを生成するでしょう Market
あなたのテーブルの中で、あなたが必要とするものだけではなく。
あなたが見たら make_slugsのコード そこには魔法がないことがわかります。それが行うのは、モデルオブジェクトを100ブロックにロードしてから保存することです。
だから、それが私が最初に試すことになるでしょう。モデルをリロードして保存するだけです。その後、より深く掘り下げるためにいくつかのログを見る必要があります。
他のヒント
def rake_market_slugs
MODEL="Market"
Rake::Task["friendly_id:redo_slugs"].invoke(MODEL)
end
Try it...
所属していません StackOverflow