Backbone.js Railsで使えるGem

Backbone.jsで関連するモデルのREADとCREATE

投稿日:

 

ThoughtBotの本を読み進めてるけど私には買ってよかったと感じている

ゾンビviewのワナを回避する方法や細かい設定や意味は自分で試行錯誤していたら何時間無駄にするかわからなかった

マニュアルやソースだけだと全部平坦に書いてあるからどれが大事でとかわからないし、将棋でも金銀の動かし方を知ってても定跡を知らないと勝てないよね

準備

ModelとCollection

Articleモデル

Articlesコレクション

Commentモデル

Commentsコレクション

 Router

読み込み待ちの知恵

読み込み待ちの知恵として、前はコレクションのresetイベントを監視していたけど、fetchがsuccessするまで待つ方法をとってみた コレクションと関係ない初期描画がある場合ちょっと遅くなるかもしれない

あと、どのアドレスからもアクセスできるようにshowは@collectionを待たず、idからmodelデータをfetchして取ってくることにした

マニュアルには、collectionのurlを指定すれば、modelのurlは指定しなくていいって書いてあるけど、こういうcollectionからgetじゃない場合はmodelのurlRootを書いておく必要があった

READ

さて、showのメソッドでは個別記事とコメントを全部取得するようにJSONを決めた

これをArticleモデルと1対多の関係にあるCommentsCollectionに配置するには事前の準備が必要

こんな感じでattributesからcollectionプロパティにその都度移しておけばOK

これはThoughtBotの本に書いてあったやり方だ

ただ、複雑になるとBackbone-relationalを使ったほうがいいって

これで、上のrouterやその先のviewから

でプロパティのcollectionにアクセスできる

CREATE

書き込みをするにはコメントを投稿するAPIをつくったけど、articleはタイトルだけで内容をもってないので、最初のコメントとして記事の内容を投稿したい(2chの1みたいなイメージ)

そうすると記事の投稿と関連するコメントを一度に投稿できるとうれしい

まずRailsの側で準備が必要

これで accepts_nested_attributes_forで関連するモデルのattributesにアクセスできる

 

次にBackbone側

考え方としては、articleの下にcomments_attributesをくっつけたJSONをPOSTするようにすればいい

JSON化してるのはモデルかコレクションのtoJSONメソッドなのでこれをオーバーライドすればOK

今回はArticleモデルのtoJSONをオーバーライドする

でも、これだけじゃうまくいかない

なぜかというと上でもともとREADしてきたattributesにある方のcommentsをきちんと消してないから

silent:trueでこっそり消しておく

-Backbone.js, Railsで使えるGem
-,

執筆者:

関連記事

sunspot_railsで全文検索

sunpotはsolrというJava製の全文検索サーバをrubyから使えるGem sunspot_rails はsunspotにマージされてました 参考 railscasts.com/episodes

no image

Mongoidで地理情報インデックスを使おうとしたけどうまくいかない

試したgem mongoid_geo mongoid_geospatial 試してないgem mongoid_spacial

no image

Rails3.2.8で自動テスト環境を整える〜cucumber+spork+guard

環境 ruby 1.9.3 & rails 3.2.8 参考 cucumber + spork + guard + factory_girl あってもよいが[crayon-5926642bb4 …

Railsでhtmlファイルやリンク先のスクリーンショットを撮影~IMGKit&wkhtmltoimage

  github.com/csquared/IMGKit 目次1 環境2 wkhtmltoimageのインストール3 imgkitのインストール4 試す5 日本語フォント 環境 ubuntu …

Deviseのユーザーと既存のMongoidモデルを関連づける

前提 Rails3.2でHTML5で取得した位置情報をMongoDBに保存してGoogleMapsでみる~mongoid、gmaps4rails Rails3.2+Mongoidでログイン機能~dev …