LoginSignup
1
1

More than 5 years have passed since last update.

Ruby on Rails のルーティングについて WebAPIについて

Posted at

始めに

・Ruby on Rails のルーティングについて
http://qiita.com/triple4649/items/7e16212be201d5c87e78
の続き
今回はWebAPI編

序章

前にも書いたけれど
Ruby On RailsのWeb上の記事、ものすごくわかりにくい
もしかして、Railsの規約に沿ったことしかやっていなくて、少しでもレールからそれたことをやっている人は少ないのか?

やりたいこと

image.png
値を入力してボタンを押すと
image.png
のようにAjaxで非同期通信を行い、ブラウザ上に入力文字列を表示するという、ごく簡単なもの
JavaのServletだったら、response#writer#printlnで実現できるやつ

実装

HTML側

非同期.html
<!DOCTYPE html>
<html>
<script>
function doPost(){
    var req = new XMLHttpRequest();
    req.open('POST', 'http://localhost:3000/nikkyuusanpostasyn/', true);
    req.setRequestHeader('content-type',
    'application/x-www-form-urlencoded;charset=UTF-8');
    req.send('name='+f('nikkyu').value);
    req.onload =  r(req,
        function(){f('result').innerText=req.responseText ;});
}

function r(req,caller){
  return function (event){
    if (req.readyState === 4 && req.status === 200) 
      caller();
  };
}
function f(str){
    return document.getElementById(str);
}
</script>
<body>
<% @msgToNikkyusan%><input type='text'id='nikkyu'><input type='button' onclick='doPost();'>
<div id='result'></div>
</html>

まぁ、JQueryって何ですかってコーディングですね
ただ、この程度の非同期処理をJQueryやら他のJSフレームワークのAjaxメソッドを使わないと実装できないものどうかと

Controller側の実装

sample_controller.rb
class SampleController< ApplicationController
protect_from_forgery :expect  => ["create"]
def sayhello
     @msgToNikkyusan = '293、hello!';
     @msgToPerorisan = 'ペロリさん、hello!';
  end
  #初期表示で呼ばれるメソッド
  def sayhelloToNyukkyusan
     @msgToNikkyusan = '293、hello!';
  end

  #Ajaxから呼ばれるメソッド
  def sayhelloasynpost 
    render text:"こんにちは!#{params[:name]}さん"
  end
end

JSONとか正直どうでもいい、私はただのテキストをWebで表示したいだけ

ルーティング

なんか、ここをちゃんと説明しているページがない
前回の記事の表でルーティングを整理してみる

要求 URI コントローラーのクラス名 コントローラーのメソッド名 viewのフォルダ viewのファイル名
get nikkyuusan sample_controller sayhelloToNyukkyusan sample sayhelloToNyukkyusan.html.rb
post nikkyuusanpostasyn sample_controller sayhelloasynpost - -

POST側の記述がAjax側のルーティングを示している
ポイントはViewのフォルダとViewファイルを使わずに、Controller側でrenderメソッドを使ってレスポンスにデータを渡している点ですね
つまり、おおざっぱにいうと、RailsのrenderはJavaServletのresponse#writer#printlnと同じものだと覚えておけばいいのか

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1