【質問終了】ruby on rails3で、rjsを全然使わずにxhrリクエストをさばくapiを作りたいのですが、・・・
質問:
Google Closure × Rails がやりたかったんです。
ruby on rails3で、rjsを全然使わずにxhrリクエストをさばくapiを作りたいのですが、書き方がわかりません。
例えば、postの xhrで、createメソッドをよんでコメントを書き込んだあと、書き込んだコメントをjson形式でrespondして、クライアントサイドで使いたいのですが、controllerの書き方がわかりません。
自己解決
comment_controller.rb
def create return redirect_to '/404.html' unless request.xhr? // xhr以外をはじく @post = Post.find(params[:post_id]) @comment = @post.comments.create(params[:comment]) respond_to do |format| format.js { render :text => @comment.to_json } // xhrアクセスの際はjsonをレスポンスする end end
JS側。リクエストヘッダにこれを入れる。僕はgoogle closure だからこれ
my.App.prototype.onSubmitComment_ = function(e) { e.preventDefault(); var xhr = new goog.net.XhrIo(); xhr.headers.set('Accept', 'text/javascript'); // respond_to のformat.js に対応 xhr.headers.set('X-Requested-With', 'XMLHttpRequest'); // request.xhr? を trueにする var query = new my.util.Uri(); // formのデータをrails用にシリアライズする人 query.setRailsFormQuery(this.form_); this.eh_.listen(xhr, goog.net.EventType.COMPLETE, this.onCompleteSubmitComment_); xhr.send(this.form_.action, 'POST', query.toString()); };
セキュリティ的にはどうなんでしょうね。外部からは叩けないから安全てことなのか。
参考
http://lists.rubyonrails.org/pipermail/rails/2006-June/049297.html