module JsonapiForRails::Controller::Actions::Relationship::InstanceMethods
Public Instance Methods
relationship_add()
click to toggle source
POST for to-many relations only
# File lib/jsonapi_for_rails/controller/actions/relationship.rb, line 72 def relationship_add unless @jsonapi_relationship[:definition][:type] == :to_many jsonapi_render_errors 403, 'Operation allowed for to-many relationships only.' return end records = @jsonapi_relationship[:params][:data].collect do |record| record = @jsonapi_relationship[:definition][:receiver][:class].find_by_id( record[:id] ) unless record jsonapi_render_errors 403, "Non-existing record #{record.inspect}." return end record end records.each do |record| @jsonapi_record.send(@jsonapi_relationship[:definition][:name]) << record end #self.send :relationship_show end
relationship_remove()
click to toggle source
DELETE for to-many relations only
# File lib/jsonapi_for_rails/controller/actions/relationship.rb, line 97 def relationship_remove unless @jsonapi_relationship[:definition][:type] == :to_many jsonapi_render_errors 403, 'Operation allowed for to-many relationships only.' return end records = @jsonapi_relationship[:params][:data].collect do |record| record = @jsonapi_relationship[:definition][:receiver][:class].find_by_id( record[:id] ) unless record jsonapi_render_errors 403, "Non-existing record #{record.inspect}." return end record end records.each do |record| @jsonapi_record.send(@jsonapi_relationship[:definition][:name]).delete record end end
relationship_show()
click to toggle source
GET
# File lib/jsonapi_for_rails/controller/actions/relationship.rb, line 12 def relationship_show #$stderr.puts "JsonapiForRails::Controller::Actions::Relationship#relationship_show called" rel = @jsonapi_record.send @jsonapi_relationship[:definition][:name] @json = nil if @jsonapi_relationship[:definition][:type] == :to_one @json = { type: @jsonapi_relationship[:definition][:receiver][:type], id: rel.id.to_s } elsif @jsonapi_relationship[:definition][:type] == :to_many @json = rel.collect do |r| { type: @jsonapi_relationship[:definition][:receiver][:type], id: r.id.to_s } end end @json = {data: @json} # Links if @jsonapi_links record_path = self.send( "#{jsonapi_model_type.to_s.singularize}_path", @jsonapi_record.id ) @json[:links] = { self: "#{record_path}/relationships/#{@jsonapi_relationship[:definition][:name]}" } end jsonapi_render @json end
relationship_update()
click to toggle source
PATCH
# File lib/jsonapi_for_rails/controller/actions/relationship.rb, line 48 def relationship_update if @jsonapi_relationship[:definition][:type] == :to_many jsonapi_render_errors 403, 'Replacing all members of a to-many relationship is forbidden.' return end related = nil if @jsonapi_relationship[:params][:data] related = @jsonapi_relationship[:definition][:receiver][:class].find_by_id( @jsonapi_relationship[:params][:data][:id] ) unless related jsonapi_render_errors 403, 'Record not found.' return end end @jsonapi_record.send :"#{@jsonapi_relationship[:definition][:name]}=", related @jsonapi_record.save #self.send :relationship_show end