2016-04-02 6 views
0

Ich habe versucht, eine einfache Verkleidung mit Schienen zu machen, die einige Benutzer Informationen aus unserem System zeigt.Warum bekomme ich Benutzer und nicht Benutzer auf Benutzer/Index-Route?

Meine Route:/api/Anwender gibt diese json:

{"users":[{"id":1,"username":"Evolutio","email":"[email protected]"}]} 

Mein emberadapter:

import DS from 'ember-data'; 
export default DS.RESTAdapter.extend({ 
    host: 'https://api.domain.tld', 
    namespace: 'api', 
    headers: { 
     //"API_KEY": "secret key", 
    } 
}); 

meine Benutzer/model.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    username: DS.attr('string'), 
    email: DS.attr('string') 
}); 

meine Benutzer/index/route.js

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
     let users = this.store.findAll("users"); 
     return users; 
    } 
}); 

Ich besuche diese URL: localhost: 4200/users

Wenn ich die Benutzer/model.js lösche ich diesen Fehler:

WARNING: Encountered "users" in payload, but no model was found for model name "user" (resolved model name using [email protected]:application:.modelNameFromPayloadKey("users")) 

und die Daten mit dem Ember Inspektor: enter image description here

Vorlage von den Benutzern

mein Index:

<ul> 
{{#each model as |user|}} 
    <li> 
     {{#link-to 'users.show' user}} 
      {{user.username}} {{user.roles}} 
     {{/link-to}} 
    </li> 
{{/each}} 
</ul> 

mein SCND Problem ist, dass Ich kann keine Beziehung herstellen. meine api kehrt jetzt das:

{"users":[{"id":1,"username":"Evolutio","email":"[email protected]","roles":[{"id":5,"name":"admin","alias":"Administrator"}]}]} 

mein Benutzer/model.js:

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    username: DS.attr('string'), 
    email: DS.attr('string'), 

    roles: DS.hasMany('role'), 
}); 

und jetzt habe ich diesen Fehler:

Error while processing route: users.index Assertion Failed: Passing classes to store methods has been removed. Please pass a dasherized string instead of undefined 

ich es mit diesem gelöst: meine 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 

und meine Benutzer/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') 
}); 

Antwort

1

Sie haben wirklich gut, eine Sache, was Sie ändern müssen, ist der Dateiname des Modells. Wenn Sie die Pod-Syntax verwenden möchten, verschieben Sie users/model.js zu user/model.js, oder speichern Sie sie app/model/user.js.

Das Modell ist immer im Singular. Der Dateiname ist in der Einzahl.

aktualisieren app/index/route.js:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
     return this.store.findAll("user"); 
    } 
}); 

Wenn Sie noch Ember.js lernen gerade erst begonnen habe ich einen Blog-Post, wo Sie mehr über die Konventionen lernen können: Ember.js tutorial

+0

Dank, funktioniert super! – Evolutio

+0

können Sie in mein zweites Problem schauen. Ich habe Ihre App verwendet, die Sie in Ihrer Homepage als Basis verlinkt haben. Aber ich kann keinen Fehler bekommen. – Evolutio

+0

Sie haben also bereits eine 'app/model/role.js' mit' name' und 'alias' Feld, plus ein' user: belongsTo ('user') '? – Zoltan

Verwandte Themen