Railsでのfind_all_byとwhere

RailsでSampleモデルをつくって、ActiveRecordを継承してると

Sample.all

で全レコード取れたりします

Sample.find_all_by_flag(true)

とかすればflagフィールドがtrueのものが複数取れましたが、これはRails4からはないようです
find_all_by – リファレンス – – Railsドキュメント

Rails4ではwhereで代替らしいので

Sample.where(flag: true)

で同じものがとれます

RailsにGoogle Analyticsをいれてみた

Ruby on RailsにGoogle Analyticsのコードを入れてみました

Google Analyticsでアカウントをつくって、サイトを登録し
トラッキング コードを用意しておきます

slimを導入していたのでslimです

Railsの view/layouts/application.html.slim にいれることとして
まずpartialを準備

新しく作りました
$ vim view/shared/_google.html.slim

javascript:
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-xxxxxxxxx-x', 'auto');
  ga('send', 'pageview');

これをapplication.html.slimで読み込む
$ view/layouts/application.html.slim

doctype html
html
  head
    title
      | sample site
    = stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true
    = javascript_include_tag 'application', 'data-turbolinks-track' => true
    = csrf_meta_tags
  body
    #wrapper
      header#head
        = render 'layouts/header'
        = render 'layouts/navigation'
      = yield
      footer#foot
        = render 'layouts/footer'
        - if Rails.env == 'production'
          = render 'shared/googleanalytics'

↓を追記しました

        - if Rails.env == 'production'
          = render 'shared/google'

production環境だけ読み込むようにしました

Qiita API v2のapiをrubyで叩いてみた

Qiita API v2をrubyで叩いてみました

事前準備としてGemを2ついれました
bundlerを使って

$ bundle init
$ vim Gemfile

source "https://rubygems.org"

gem "faraday"
gem "json"

$ bundle install -j4

これでGemが入りました
faradayがHTTPクライアントで、
jsonはjsonを扱ってくれるものです

まず、ユーザーの情報を取ってみました
Qiita API v2ドキュメント – Qiita:Developer – Qiita

もっともストックされてるhirokidaichiさんをとってみました
ランキングは
qrank | Qiitaの人気記事ランキング
で確認しました

!#/usr/bin/env ruby

require 'faraday'
require 'json'

conn = Faraday::Connection.new(:url => 'http://qiita.com') do |builder|
  builder.use Faraday::Request::UrlEncoded
  builder.use Faraday::Response::Logger
  builder.use Faraday::Adapter::NetHttp
end

response = conn.get do |request|
  request.url '/api/v2/teams'
end
json = JSON.parser.new(response.body)
p json.parse

jsonがこちら

{"description"=>"", "facebook_id"=>"hirokidaichi", "followees_count"=>80, "followers_count"=>1102, "github_login_name"=>"hirokidaichi", "id"=>"hirokidaichi", "items_count"=>30, "linkedin_id"=>"", "location"=>"", "name"=>"daichi hiroki", "organization"=>"", "permanent_id"=>35671, "profile_image_url"=>"https://gravatar.com/avatar/cc08756798ff94dad86ebc51c1701195?d=https%3A%2F%2Fidenticons.github.com%2F35dce29cf91a19ead1de07e2c3616bd1.png&r=x", "twitter_screen_name"=>"hiroki_daichi", "website_url"=>""}

今度は投稿してみます
アクセストークンがいるので、Qiitaにログインして発行します
プロフィール編集の中に有ります
https://qiita.com/settings/tokens/new
投稿できる権限を与えます

qiita-token

保存するとアクセストークンがもらえます

そして、投稿
Qiita API v2ドキュメント – Qiita:Developer – Qiita
Authorizationのxxxxxxxxxxxxxxxxxxxにアクセストークンをセットします

!#/usr/bin/env ruby

require 'faraday'
require 'json'

param = {
  body: '#sample', coediting: false, gist: false, private: false,
  tags: [], title: 'sample', tweet: false
}

conn = Faraday::Connection.new(:url => 'http://qiita.com') do |builder|
  builder.use Faraday::Request::UrlEncoded
  builder.use Faraday::Response::Logger 
  builder.use Faraday::Adapter::NetHttp 
end

response = conn.post do |request|
  request.url '/api/v2/items'
  request.headers = {
    'Authorization' => 'Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'Content-Type' => 'application/json'
  }
  request.body = JSON.generate(param)
end
json = JSON.parser.new(response.body)
p json.parse

これを実行すると無事、投稿されました
Qiita:Teamに投稿するには、URLをチームのURLに変えれば投稿できました

Railsでrake db:seedをやり直す

Ruby on Railsでdb:seedをすると初期値がデータベースに保存されて便利ですが
初期値を変えてやり直したい..ので調べました

rake db:seed
を再度するとデータが重複してしまうようで
データベースを作りなおしてやることにしました
※初期値以外のデータが飛びます、それでもよければ

db/seed.rb
を書き換えて初期値を変えてやった後、

データベース作り直し
$ rake db:migrate:reset

これだと一旦データベースをDROPしてからmigrationもしてくれるようです
つまりは、初期値がないけど構造は最新になります

初期値をいれましょう
$ rake db:seed

これでできあがり

seed-fuをいれてやるともっとよくできそうです(試せてないです)
railsで初期データを入れる(seed-fuの使い方) – Qiita