0

保存時に設定したパラメーターを受け入れるように、vestal_versions プラグインを変更しようとしています。このパラメーターは、更新時にいつリビジョンを作成するかを決定する新しいフラグとして機能します。現在、新しいリビジョンが必要な場合、更新時に常に実行されます。変更されていないプラグイン コードの影響を受ける領域は次のとおりです。

after_update :create_version, :if => :needs_version?

    def create_version
        versions.create(:changes => changes.slice(*versioned_columns), :number => (last_version + 1))
        reset_version
    end 

送信時にビューで送信するパラメーターは「forcerevision = n」です。このパラメーターを取り込むにはどうすればよいですか? また、"forcerevision=y" の場合にのみ実行できるようにするには、どの条件を使用すればよいでしょうか? after_update フィルターを変更するのが最もクリーンだと思われますか?

これは、更新時に渡されるデータのログです。

Processing NotesController#update (for 521.0.0.1 at 2009-12-05 13:25:45) [PUT]
Parameters: {"authenticity_token"=>"#########################+k=", "id"=>"4", "forcerevision"=>"n", "note"=>{"notebook_id"=>"", "public"=>"n", "body"=>"A versioned note", "title"=>"Version Note Test", "flag"=>"important", "star"=>"false", "tag_list"=>""}}

Github の vestal_versions

4

1 に答える 1

0

これを行う最もクリーンな方法は、モデルがバージョン管理されていると宣言されているときに attr_accessor を追加することです。

次に、needs_version をオーバーライドしますか? その属性を確認します。

LaserLemon::VestalVersions::ClassMethods#versioned の任意の場所に次の行を追加します。

attr_accessor :force_reversion

次に、LaserLemon::VestalVersions::InstanceMethods#needs_version? を書き換えます。この属性を確認するには:

注意: チェックボックスの処理方法により、"0" はチェックボックスとブール フィールドでは false と見なされますが、Ruby では true 値です。したがって、force_reversion が false と評価されないかどうかを確認することはできません。

def needs_version?
  !(versioned_columns & changed).empty? || 
    ![nil, "0", 0, false].include?(force_reversion)
end

これで準備完了です。列であるかのように force_reversion に任意の値を渡すだけです。

上記の変更後、次のモデル:

クラス ユーザー

@user.update_attributes(:force_reversion => true, :unversioned_column => new_value)

またはフォームで:

<%= form_for @user do |f| %>
  <%= f.label :force_reversion, "Force New Version" %>
  <%= f.check_box :force_reversion %>
  ... More fields ...
<% end %>
于 2009-12-05T19:54:55.950 に答える