ruby on rails でAjaxを使いcontrollerのメソッドを動かす
views/albums/_form.html.erb
<%= button_tag type: 'button', :id => 'get-near-albums' do %>
<%= 'Start Ajax' %>
<% end %>
javascript
$("#get-near-albums").click(function(){
$.ajax({
url: "get_near_albums",
type: "GET",
}).done(function(data){
alert("success");
console.log(data);
}).fail(function(data){
alert("errror");
console.log(data);
});
});
これでボタンがクリックされるとjavascriptで記述したajax処理が動く
controller/albums_controller.rb
def get_near_albums
puts "get_near_albums"
@albums = Album.all
@albums.each do |album|
puts album.title
end
render nothing: true #
end
memo
本来get_near_albums.html.erbという空のviewファイルを作成する必要があるが、render nothing: trueを記述しておくと必要なくなる。 ちなみに、viewに値を返したいときは以下のように記述(例としてjson)
render :json => @albums
routes.rb
get 'albums/get_near_albums'
resources :albumsを記述していたら、なぜかshow.html.erbに飛ばされた。 おそらく、:idの部分が"get_near_albums"と認識されていた。。。 面倒なのでshowは使わないことにして以下のようにrouteに記述
get 'albums/get_near_albums'
resources :albums, :except => [:show]
以上で、「Start Ajax」ボタンを押すと、コンソール画面にalbumのタイトル一覧が表示されるので、ajaxが成功していることがわかる
参考
http://qiita.com/somewhatgood@github/items/113773747a6faa800366 http://blog.toshimaru.net/jquery-ajaxdeferredajax/ http://railsdoc.com/references/render