@talha wrote:
I am stuck with the JSON API , AMS, RAILS combination....
I covered ember with some books like "Rock and Roll with ember js" , "Ember-cli -101" But here is a scenario where i need to put some has_many / belongs_to relationship with some data...
In My Ember Application
models/customer.js
export default DS.Model.extend({ name: DS.attr('string'), contactname: DS.attr('string'), contactno: DS.attr('string'), othcontactno: DS.attr('string'), othrefdetails: DS.attr('string'), projects: DS.hasMany('project'), });
models/project.js
export default DS.Model.extend({ name: DS.attr('string'), customer: DS.belongsTo('customer' , {async:true}), agent: DS.belongsTo('agent' , {async:true}) });
adapters/application.js
export default DS.JSONAPIAdapter.extend({ host: 'http://localhost:3000', shouldReloadRecord(store, snapshot) { return false; }, });
serializers/applicaiton.js
export default DS.JSONAPISerializer.extend({ });
And in my Rails api
Rails.application.routes.draw do resources :enquiries resources :agents resources :customers resources :projects end class Project < ActiveRecord::Base belongs_to :customer #belongs_to :agent #has_many :enquiries accepts_nested_attributes_for :customer end class Customer < ActiveRecord::Base has_many :projects accepts_nested_attributes_for :projects end class ProjectSerializer < ActiveModel::Serializer attributes :id, :name belongs_to :customer #has_one :agent #has_many :enquiries end class CustomerSerializer < ActiveModel::Serializer attributes :id, :name, :contactname, :contactno, :othcontactno, :othrefdetails has_many :projects end
initializers/json_api.rb
ActiveModel::Serializer.config.adapter = ActiveModel::Serializer::Adapter::JsonApi
Gem File (I am using 0.10.0 rc3 due to some bugs in 0.9 version)
gem 'active_model_serializers' , '~> 0.10.0.rc3' # gem 'active_model_serializers' , '~> 0.9.3'
I am getting a json response for localhost:3000/customers From The rails api like this
{"data":[{"id":"6","type":"customers","attributes":{"name":"Talhaqqq","contactname":"Mohammed Talha","contactno":"9744878171","othcontactno":"+9104735253585","othrefdetails":"nil"},"relationships":{"projects":{"data":[{"id":"1","type":"projects"}]}}},{"id":"10","type":"customers","attributes":{"name":"Ameer Ali qq","contactname":"Ameer Mohammed Ali","contactno":"234234","othcontactno":"439870987","othrefdetails":"othr ref detaila"},"relationships":{"projects":{"data":[]}}},{"id":"67","type":"customers","attributes":{"name":"Signlab qqq","contactname":"Sigblab contact","contactno":"2340987","othcontactno":"sjfdla98","othrefdetails":"s098-"},"relationships":{"projects":{"data":[{"id":"2","type":"projects"}]}}},{"id":"68","type":"customers","attributes":{"name":"Anwar Nazar","contactname":"Anwar","contactno":"2+87+968","othcontactno":"354+641+9","othrefdetails":"31651651"},"relationships":{"projects":{"data":[]}}},{"id":"69","type":"customers","attributes":{"name":"Cust name qqq","contactname":"asdfda","contactno":"sdfsdf","othcontactno":"sadfafd","othrefdetails":"asfdgadfg"},"relationships":{"projects":{"data":[]}}},{"id":"70","type":"customers","attributes":{"name":"dsasva","contactname":"a","contactno":"sdfvsfva","othcontactno":"asdv","othrefdetails":"vafasdfv"},"relationships":{"projects":{"data":[]}}},{"id":"71","type":"customers","attributes":{"name":"egrweg","contactname":"aevg","contactno":"asdgr","othcontactno":"aergarg","othrefdetails":"saerg"},"relationships":{"projects":{"data":[]}}}]}
I am trying to set a customer for a project....
I tried it manually in one of the routes actions.... (I dont know the best way to do it in ember ).. Both of the tutorial books is not giving me a best way to set the relationship data
let project = this.store.peekRecord('project', 3); let customer = this.store.peekRecord('customer', 6); project.set('customer', customer ); project.save();
And i am getting this on rails
Parameters: {"data"=>{"id"=>"3", "attributes"=>{"name"=>"Xyy project"}, "relationships"=>{"customer"=>{"data"=>{"type"=>"customers", "id"=>"6"}}}, "type"=>"projects"}, "id"=>"3"}
I tried to permit the relationships, attributes in Projects_controller
params.require(:data).permit! # params.require(:data) # .permit(:id , :attributes => [:name] , :relationships => [:customer => [:data] =>[:type] ] , :customer => [:data] )
But nothing worked well .. always given unpermitted parameter... and i ended up permitting all params using
params.require(:data).permit!
And finally , When i did the update using this function
def update @project = Project.find(params[:id]) @customer = Customer.find(6) @project.update_attributes(:customer => params[:customer]) if @project.update(project_params) head :no_content else render json: @project.errors, status: :unprocessable_entity end end
I got this response in rails customer_id = NULL..
Started PATCH "/projects/1" for 127.0.0.1 at 2015-12-09 09:32:42 +0530 Processing by ProjectsController#update as JSON Parameters: {"data"=>{"id"=>"1", "attributes"=>{"name"=>"Lulu Mall Project qw "}, "relationships"=>{"customer"=>{"data"=>{"type"=>"customers", "id"=>"67"}}}, "type"=>"projects"}, "id"=>"1"} Project Load (1.0ms) SELECT `projects`.* FROM `projects` WHERE `projects`.`id` = 1 LIMIT 1 CACHE (0.0ms) SELECT `projects`.* FROM `projects` WHERE `projects`.`id` = 1 LIMIT 1 [["id", "1"]] Customer Load (0.9ms) SELECT `customers`.* FROM `customers` WHERE `customers`.`id` = 6 LIMIT 1 (0.3ms) BEGIN SQL (1.1ms) UPDATE `projects` SET `customer_id` = NULL, `updated_at` = '2015-12-09 04:02:42' WHERE `projects`.`id` = 1 (50.4ms) COMMIT {"data"=>{"id"=>"1", "attributes"=>{"name"=>"Lulu Mall Project qw "}, "relationships"=>{"customer"=>{"data"=>{"type"=>"customers", "id"=>"67"}}}, "type"=>"projects"}, "controller"=>"projects", "action"=>"update", "id"=>"1"} (0.8ms) BEGIN
I know i am totally confused,, I tried to use AMS 0.9 version without the JSON API Standard , but ended up in stack level too deep error and come other problems.
But using the AMS 0.10.0 rc version and standard JSON API Format, i couldn't find any tutorials or answers for these questions..
- How to set relationship data in ember ?
- The best json format from API (standart json / json with embed ids )?
- How to allow strong parametes in Rails (Especially nested with relationships{id, type} etc... With STANDARD JSON API FORMAT)?
- Update relationship (update attributes ) in Rails with the json api request from ember?
- Is it best to go with the JSON API FORMAT , and AMS ...AND JSON API ADAPTER /SERIALIZER...
It feels some thing like an eclipse should happen with these things to work all together...
Posts: 1
Participants: 1