Доступ к параметру в плагине - PullRequest
0 голосов
/ 05 декабря 2009

Я пытаюсь изменить плагин 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"=>""}}

vestal_versions на Github

1 Ответ

0 голосов
/ 05 декабря 2009

Самый простой способ сделать это - добавить attr_accessor, когда модель объявлена ​​версионной.

Тогда переопределить needs_version? проверить этот атрибут.

В любом месте в LaserLemon :: VestalVersions :: ClassMethods # versioned добавить эту строку:

attr_accessor :force_reversion

Затем переписать LaserLemon :: VestalVersions :: InstanceMethods # needs_version? чтобы проверить этот атрибут:

N.B. из-за способа обработки флажков «0» считается ложным для флажков и логических полей, но является истинным значением в ruby. Поэтому мы не можем просто проверить, не возвращает ли 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 %>
...