Category Archives: rails

zendesk 認証

  • ID
    {メールアドレス}/token
  • PASS
    {APIトークン}

faradayでの実装パターン

@client = Faraday.new(:url => CONFIG_ZENDESK_URL) do |conn|
  conn.request :json
  conn.adapter Faraday.default_adapter
  conn.response :json, :content_type => /\bjson$/
  conn.basic_auth("#{メールアドレス}/token", api_token) // IDとPASSでBasic認証
end

each 1000件づつ実行

方法1

User.find_each do |u|
  p u // 1000件づつ、メモリにキャッシュ。1件づつブロック内で処理。
end

方法2

User.find_in_batches do |us|
  p us.count // 1000件が出力される
end

association先がnilのレコードを取得

モデル構成

class User < ApplicationRecord
  has_many :comments
  has_one :nickname
end

レコード取得

// user.comments = nil のユーザー
User.includes(:comments).references(:comments).where(comments: {id: nil})

// user.nickname = nil のユーザー
User.includes(:nickname).references(:nicknames).where(nicknames: {id: nil})

route アクション追加

ルーティング

Rails.application.routes.draw do
  resources :forms, only: [:show], param: :app_id do
    get 'fetch_kintone', on: :member
    get 'post_to_kintone', on: :collection
  end
end

確認

Prefix Verb URI Pattern                            Controller#Action
fetch_kintone_form GET  /forms/:app_id/fetch_kintone(.:format) forms#fetch_kintone
post_to_kintone_forms GET  /forms/post_to_kintone(.:format)       forms#post_to_kintone
                 form GET  /forms/:app_id(.:format)               forms#show

docker rails batch

Dockerfile

FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

docker-compose.yml

version: '2'
services:
  db:
    image: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  web:
    build: .
    # command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

Gemfile

source 'https://rubygems.org'
gem 'rails', '4.2.6'

Gemfile.lock

ブランク

railsアプリ作成

docker-compose run web rails new . --force --database=mysql --skip-bundle

db設定変更

version: '2'
services:
  db:
    image: mysql
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

image作成

docker-compose build

実行

docker-compose run web rake db:create
docker-compose run web rails c

rails c 日本が???になるケースの対応

原因

localeのエラー

対応

// エラーがでていることを確認
locale 

// 設定変更
export LC_ALL=ja_JP.utf8

// エラーが解消されていることを確認
locale

// ruby, railsインストール
rbenv install 2.2.4
rbenv global 2.2.4
gem install rails

参考

http://stackoverflow.com/questions/35621614/i-got-warning-setlocale-lc-ctype-when-i-ssh-connect-to-vagrant-centos-6

radio button form_tag

.select
  = label 'validation_setting', "ON", class: 'radio-inline' do
    = radio_button_tag 'validation_setting', "ON", {:checked => true}
    %span ON
  = label 'validation_setting', "OFF", class: 'radio-inline' do
    = radio_button_tag 'validation_setting', "OFF"
    %span OFF