3 Stimmen

Rails 3 Disable Modell nicht löschen

Ich habe mehrere Modelle, die ich möchte, dass der Benutzer zu "deaktivieren" es vs. Zerstörung es. Diese Modelle haben eine deaktivieren Boolean. versuchen, diese Arbeit zu machen.

derzeit in application_controller.rb

helper_method :disable

def disable(model)
 @model = "#{model}".find(params[:id])
 @model.update_attribute(:disable => true)
 flash[:notice] = "Successfully disabled #{model}."
 redirect_to company_ + "#{model}".pluralized + _url(current_company)
end

Muss ich für jede Route, für die ich diese Funktion nutzen möchte, einen neuen Pfad in den Routen erstellen? Ideal wäre es, wenn ich etwas Ähnliches wie die Zerstörungsmethode machen könnte.

6voto

DanneManne Punkte 20806

Ich würde ActiveRecord wahrscheinlich um eine Disable-Methode erweitern, so dass Sie @model.disable() genauso aufrufen können wie @model.destroy(). Auf diese Weise können Sie alle Standard-Routen so belassen, wie sie sind, und nur die Zerstörungsaktion in Ihrem Controller ändern, um disable() anstelle von destroy() zu verwenden.

Vielleicht so:

module MyDisableModule
  def self.included(recipient)
    recipient.class_eval do
    include ModelInstanceMethods
  end
end

  # Instance Methods
  module ModelInstanceMethods

    #Here is the disable()
    def disable
      if self.attributes.include?(:disabled)
        self.update_attributes(:disabled => true)
      else
        #return false if model does not have disabled attribute
        false
      end
    end
  end
end

#This is where your module is being included into ActiveRecord
if Object.const_defined?("ActiveRecord")
  ActiveRecord::Base.send(:include, MyDisableModule)
end

Und dann in Ihrem Controller:

def destroy
  @model = Model.find(params[:id])
  if @model.disable #instead of @model.destroy
    flash[:notice] = "Successfully disabled #{@model.name}."
    redirect_to #wherever
  else
    flash[:notice] = "Failed to disable #{@model.name}."
    render :action => :show
  end
end

Beachten Sie, dass in diesem Beispiel disabled das Attribut und disable die Methode ist, die ein Modell deaktiviert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X