0

コントローラー メソッドにいくつかの Friendly_id gem 機能を統合しようとしています。

基本的に、カスタム メソッドに基づいて作成された URL を持つ Market オブジェクトがあります。カスタム メソッドに基づいているため、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 task のコードを見ると、redo_slugs単純にdelete_slugsandmake_slugsタスクを実行していることがわかります。だから、これをしない理由は他にもある。Market必要なものだけではなく、テーブル内のすべてのスラッグを生成します。

make_slugs のコードを見ると、そこに魔法がないことがわかります。モデル オブジェクトを 100 個のブロックで読み込み、保存するだけです。

だから、それが私が最初に試すことです。モデルをリロードして保存するだけです。その後、さらに深く掘り下げるためにいくつかのログを確認する必要があります。

于 2010-09-24T20:04:49.110 に答える