Rails 3 Отключить модель не удалить - PullRequest
2 голосов
/ 01 марта 2011

У меня есть несколько моделей, которые я хочу, чтобы пользователь «отключил», а не уничтожил. Эти модели имеют логическое отключение. пытаясь заставить это работать.

в настоящее время в application_controller.rb

helper_method: отключить

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

Нужно ли создавать новый путь в маршрутах для каждого, для которого я хочу использовать эту функцию? Было бы идеально, если бы я мог сделать что-то подобное, как метод уничтожения.

1 Ответ

5 голосов
/ 01 марта 2011

Я бы, вероятно, расширил ActiveRecord с помощью метода отключения, чтобы вы могли вызывать @ model.disable () точно так же, как @ model.destroy (). Таким образом, вы можете оставить все маршруты по умолчанию как есть и просто изменить действие уничтожения в вашем контроллере, чтобы попытаться отключить () вместо уничтожения ().

Возможно, вот так:

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

А потом в вашем контроллере:

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

Обратите внимание, что в этом примере отключено - это атрибут, а отключение - это метод, который делает модель отключенной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...