Можем ли мы использовать пользовательское действие с параметром наследованным_ресурсами в СУХОЙ манере? - PullRequest
1 голос
/ 15 декабря 2009

У нас есть пользовательское действие (: зарегистрироваться) для нашей модели Location. Вспомогательный код очень похож на стандартный: обновление. Посколькутекаризованные_ресурсы предоставили нам «шаблон», мы скопировали код обновления из actions.rb, изменив «update_attributes» на «register», и флэш-сообщение отражает другое действие. Это не очень сухо. Мы хотели бы использовать : обновить вместо этого. Есть идеи?

class LocationsController < InheritedResources::Base
  def register(options={}, &block)
    #TODO: copied update from actions.rb.  I expect there is a better way.
    # All I changed was the flash message (to reflect the action)
    #  and the method call on the object (update_attributes -> register)
    object = resource

    if object.register
      set_flash_message!(:notice, '{{resource_name}} was successfully registered.')
      options[:location] ||= resource_url rescue nil
      respond_with_dual_blocks(object, options, true, block)
    else
      set_flash_message!(:error)
      respond_with_dual_blocks(object, options, false, block)
    end
  end

1 Ответ

1 голос
/ 09 января 2010

Унаследованные ресурсы предоставляют вспомогательные методы для действий CRUD, которые вы можете переопределить на своем контроллере. Тот, который вы ищете, это

  # Responsible for updating the resource in :update method. This allow you
  # to handle how the resource is gona be updated, let's say in a different
  # way then the usual :update_attributes:
  #
  #   def update_resource(object, attributes)
  #     object.reset_password!(attributes)
  #   end
  #
  def update_resource(object, attributes)
    object.update_attributes(attributes)
  end

Вы переопределяете это так:

class LocationController < ApplicationController
  inherit_resources

  protected

  def update_resource(object, attributes)
    object.register(attributes)
  end
...