extracted common controller behavior in order to reduce code duplication
This commit is contained in:
51
app/controllers/concerns/common_behavior.rb
Normal file
51
app/controllers/concerns/common_behavior.rb
Normal file
@ -0,0 +1,51 @@
|
||||
module CommonBehavior
|
||||
def create_and_respond(options = {}, &block)
|
||||
@object = options[:object]
|
||||
respond_to do |format|
|
||||
if @object.save
|
||||
yield if block_given?
|
||||
path = options[:path].try(:call) || @object
|
||||
respond_with_valid_object(format, notice: t('shared.object_created', model: @object.class.model_name.human), path: path, status: :created)
|
||||
else
|
||||
respond_with_invalid_object(format, template: :new)
|
||||
end
|
||||
end
|
||||
end
|
||||
private :create_and_respond
|
||||
|
||||
def destroy_and_respond(options = {})
|
||||
@object = options[:object]
|
||||
@object.destroy
|
||||
respond_to do |format|
|
||||
path = options[:path] || send(:"#{@object.class.model_name.collection}_path")
|
||||
format.html { redirect_to(path, notice: t('shared.object_destroyed', model: @object.class.model_name.human)) }
|
||||
format.json { head(:no_content) }
|
||||
end
|
||||
end
|
||||
private :destroy_and_respond
|
||||
|
||||
def respond_with_invalid_object(format, options = {})
|
||||
format.html { render(options[:template]) }
|
||||
format.json { render(json: @object.errors, status: :unprocessable_entity) }
|
||||
end
|
||||
private :respond_with_invalid_object
|
||||
|
||||
def respond_with_valid_object(format, options = {})
|
||||
format.html { redirect_to(options[:path], notice: options[:notice]) }
|
||||
format.json { render(:show, location: @object, status: options[:status]) }
|
||||
end
|
||||
private :respond_with_valid_object
|
||||
|
||||
def update_and_respond(options = {})
|
||||
@object = options[:object]
|
||||
respond_to do |format|
|
||||
if @object.update(options[:params])
|
||||
path = options[:path] || @object
|
||||
respond_with_valid_object(format, notice: t('shared.object_updated', model: @object.class.model_name.human), path: path, status: :ok)
|
||||
else
|
||||
respond_with_invalid_object(format, template: :edit)
|
||||
end
|
||||
end
|
||||
end
|
||||
private :update_and_respond
|
||||
end
|
Reference in New Issue
Block a user