Reputation: 974
I tried to make a simple emberapp with rails, that shows some users info from our system.
My route: /api/users returns this json:
{"users":[{"id":1,"username":"Evolutio","email":"[email protected]"}]}
My emberadapter:
import DS from 'ember-data';
export default DS.RESTAdapter.extend({
host: 'https://api.domain.tld',
namespace: 'api',
headers: {
//"API_KEY": "secret key",
}
});
my users/model.js
import DS from 'ember-data';
export default DS.Model.extend({
username: DS.attr('string'),
email: DS.attr('string')
});
my users/index/route.js
import Ember from 'ember';
export default Ember.Route.extend({
model() {
let users = this.store.findAll("users");
return users;
}
});
I visit this url: localhost:4200/users
When I delete the user/model.js I get this error:
WARNING: Encountered "users" in payload, but no model was found for model name "user" (resolved model name using frontend@serializer:application:.modelNameFromPayloadKey("users"))
and the data with the ember inspector:
my index template from users:
<ul>
{{#each model as |user|}}
<li>
{{#link-to 'users.show' user}}
{{user.username}} {{user.roles}}
{{/link-to}}
</li>
{{/each}}
</ul>
my scnd problem is, that I cant make any relation. my api returns now this:
{"users":[{"id":1,"username":"Evolutio","email":"[email protected]","roles":[{"id":5,"name":"admin","alias":"Administrator"}]}]}
my user/model.js:
import DS from 'ember-data';
export default DS.Model.extend({
username: DS.attr('string'),
email: DS.attr('string'),
roles: DS.hasMany('role'),
});
and now I got this error:
Error while processing route: users.index Assertion Failed: Passing classes to store methods has been removed. Please pass a dasherized string instead of undefined
I solved it with this: my user_serializer.rb:
class UserSerializer < ActiveModel::Serializer
attributes :id, :username, :email, :display_role
#has_many :roles
def display_role
"#{object.roles[0].alias}"
end
end
and my user/model.js:
import DS from 'ember-data';
export default DS.Model.extend({
username: DS.attr('string'),
email: DS.attr('string'),
display_role: DS.attr('string')
});
Upvotes: 0
Views: 63
Reputation: 4966
You did really well, one thing what you have to change is the file name of your model. If you prefer to use pod syntax move users/model.js
to user/model.js
, or you can save it app/model/user.js
.
The model is always in singular. The file name is in singular.
Update app/index/route.js
:
import Ember from 'ember';
export default Ember.Route.extend({
model() {
return this.store.findAll("user");
}
});
If you've just started to learn Ember.js I have a blog post where you can learn more about the conventions: Ember.js tutorial
Upvotes: 1