レーキを呼び出す::レールでのタスクは「タスクを構築する方法がわからない…」

StackOverflow https://stackoverflow.com/questions/3790404

質問

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_slugsmake_slugs タスク。したがって、これをしない別の理由があります。あなたはすべてのためにナメクジを生成するでしょう 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