2

Rails 3.1 と Backbone.js を使用してアプリケーションを作成しています。データベースから(Railsコントローラーを介して)プルされたモデルのコレクションを操作して、データベースからすべての属性をjavascriptに取得しています。しかし、同じメソッドとコードを使用して別のモデルで同じことを行うと、2 番目のモデルのデータベース 'id' を取得できません。

動作しているコードは次のとおりです。

window.Post = Backbone.Model.extend
  urlRoot: '/posts'

  defaults:
    author_id: 2  

window.Posts = Backbone.Collection.extend
  model: Post
  url: '/posts'

コントローラ:

respond_to :html, :json, :js

def index
  @posts = current_user.posts
  respond_with(@posts.to_json(:include => {:account => {:only => :institution}}))
end

上記では、データベースから引き出された id の属性を持つモデルを取得しますが、以下には User モデルの id 属性が含まれていません

そして、これはそうではありません:

window.User = Backbone.Model.extend
  urlRoot: '/members'

window.Users = Backbone.Collection.extend
  model: User
  url: '/members'

コントローラ:

respond_to :html, :json, :js

def index
  @users = @account.users
  respond_with(@users)
end
4

2 に答える 2

1

モデルに_idを設定してみてください。ここを参照してください:

http://documentcloud.github.com/backbone/#Model-idAttribute

idAttribute model.idAttribute:モデルの一意の識別子はid属性の下に保存されます。別の一意のキーを使用するバックエンド(CouchDB、MongoDB)と直接通信している場合は、モデルのidAttributeを設定して、そのキーからidに透過的にマップできます。

モデルがデータベースからアプリに返されると、バックボーンはそのキーを認識し、model.idを自動的に更新します。たとえば、mongodbを使用し、model.idAttribute="_id"を設定する必要があります。

于 2012-04-12T21:12:18.737 に答える
0

ご協力ありがとうございます、これが問題でした。Rails の to_json および/または Respond_with(@user) が 'id' 属性を削除していました。[link]http://stackoverflow.com/questions/3719041/how-to-customize-to-json-response-in-rails-3[link]でこれに対する解決策を見つけました。

基本的に、モデルでメソッド「as_json」を作成し、ID が含まれた属性のハッシュを返すようにしました。

于 2012-04-16T15:10:19.340 に答える