У нас есть пользовательское действие (: register) для нашей модели местоположения. Поддерживающий код очень похож на стандарт: обновление. Поскольку inherited_resources предоставил нам «шаблон», мы скопировали код обновления из actions.rb, изменив «update_attributes» на «register», а флеш-сообщение отражало разные действия. Это не очень сухо. Мы хотели бы, чтобы использовать: вместо этого обновите. Есть идеи?Можно ли использовать произвольное действие с inherited_resources сухим способом?
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
Incase кто все еще ищет это: В версии 1.3 Наследование ресурсов, то второй параметр, передаваемый update_resource теперь массив , Мне пришлось использовать атрибуты [0] внутри update_resource, чтобы получить то же поведение, что и раньше. Учитывая это изменение, вероятно, лучше не переопределять update_resource. –