プラグイン内のパラメーターにアクセスします
-
13-09-2019 - |
質問
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"=>""}}
解決
これを行う最もクリーンな方法は、モデルがバージョンであると宣言されたときにATTR_ACCERSERを追加することです。
次に、ニーズをオーバーライドしますか?その属性を確認します。
laserlemon :: vestalversions :: classMethods#バージョンを追加しました。
attr_accessor :force_reversion
次に、LaserLemon :: Vestalversions :: InstanceMethods#need_versionを書き直しますか?この属性を確認するには:
NBチェックボックスの処理方法により、「0」はチェックボックスとブールフィールドでfalseと見なされますが、Rubyの真の値です。したがって、force_reversionがfalseに評価されないかどうかを確認することはできません。
def needs_version?
!(versioned_columns & changed).empty? ||
![nil, "0", 0, false].include?(force_reversion)
end
そして、あなたはすべて設定されています。 columnのように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 %>