LoginSignup
13
13

More than 5 years have passed since last update.

railsで、MySQLから取得した値をjsonで返す

Posted at

はじめに

最初にcontrollerの雛形を作成するのは以下の記事を参考にする。

Ruby + bundler + Rails => Hello World

controllerの編集

app/controller/sample_controller.rb(MySQLの接続情報はべた書き、パラメータのエスケープなし)
※もちろんmariaDBでも動作する。

class SampleController < ApplicationController
  def index
    p params
    order = "asc"
    if params['order'].present?
      order = params['order']
    end
    records = Hash.new
    client = Mysql2::Client.new(:host => "xxx.xxx.xxx.xxx", :username => "user", :password => "password", :database => "dbname")
    sql = "SELECT id,user_nane FROM sample"
    if params['id'].present?
      sql << " where"
      sql << " id = '"+ params['id'] + "'"
    end
    sql << " order by id " + order
    sql << " limit 10"
    p sql

    client.query(sql).each do |row|
      records[row['id']] = row
    end
    client.close
    @result = records
    p @result
  end
end

viewの編集

viewではただjsonを返すだけのページを用意する。

app/views/sample/index.js.erb

<%=raw @result.to_json%>

viewのファイル名をxxxx.js.erbとするところがミソっぽい。

javascript

呼び出し側のjavascriptの例。

JQueryの場合

dataTypeをjsonにする。

  return $.ajax({
    url: '/sample/index?order=desc',
    type: 'get',
    dataType: 'json'
  })
         .always(function(){
           console.log("success");
         })
         .fail(function(){
           console.log("error");
         });

angularjsの場合

urlのパスの最後に.jsをつける。

    var params = {
        order: 'desc'
    };
    return $http({
      method: 'GET',
      url:'/sample/index.js',
      params: params,
      responseType: 'json'
    }).then(function(response) {
             return response.data;
           });
13
13
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
13
13