Category Archives: rails

select2 ajax

gem

gem "select2-rails"
gem 'ransack'

html

= form_for @content, url: club_contents_path(params[:club_access_token]) do |f|
  .form-group
    = f.label '部長'
    .select
      - if params["leader_employee_id"]
        = select_tag 'leader_employee_id', options_for_select(@employees.collect{ |u| [u.profile, u.id] }, selected: params["leader_employee_id"]), { class: 'chosen-select form-control', multiple: false, prompt: "名前か従業員番号を入力して、検索してください" }

js

contents.coffee

$ ->
  $('.chosen-select').select2({
    placeholder: "名前か従業員番号を入力して、検索してください"
    ajax:
      url: '/employees/search.json'
      dataType: 'json'
      delay: 250
      cache: false
      data: (params) ->
        q: params.term
      processResults: (data, params) ->
        results: $.map data, (obj)->
          id: obj.id
          text: obj.name
  })

root

get 'employees/search' => 'employees#search'

コントローラー

class EmployeesController < ApplicationController
  def search
    q = params[:q]
    if q.blank?
      @employees = nil
    else
      @employees = Employee.search(:name_cont=>q).result
    end
    render json: @employees
  end
end

参考

https://select2.github.io/examples.html
http://blog.scimpr.com/2016/01/04/rails4-2%E3%81%A7select%E3%82%92%E7%B5%9E%E8%BE%BC%E3%81%A7%E3%81%8D%E3%82%8Bselect2%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%9Cselect2/

rails routeのパスにidを使う

テーブル

t.string :access_token, :null => false

コントローラー

after_initialize :set_access_token

private
def set_access_token
  self.access_token = self.access_token.blank? ? generate_access_token : self.access_token
end                                                                                                                                                                                          

def generate_access_token
  tmp_token = SecureRandom.urlsafe_base64(6)
  self.class.where(:access_token => tmp_token).blank? ? tmp_token : generate_access_token
end

ルート設定

resources :schedules, param: :access_token

参考

http://qiita.com/ainame/items/eb9dcf7862630c44d5e9
http://qiita.com/mudai/items/34501ddd2f0bd834f303

rails エラーメッセージ日本語化

手順

  1. config設定
    config/application.rbの編集
// 以下を追記
config.i18n.default_locale = :ja
  1. Gemインストール
gem 'rails-i18n'
  1. modelの日本語化
    config/locales/ja.yml (新たに作成)
ja:
  activerecord:
    models:
      content: 申請内容
    attributes:
      content:
        name: 部活名
        name_カナ: 部活名_カナ
        area:  活動ブロック
        main_area: 主な活動拠点
        genre: ジャンル
        frequency: 活動頻度
        description: 活動計画
        summary: 部の特徴

参考

http://blog.chi-kun.com/entry/2016/04/17/024627

faraday zendesk

class ZendeskClient
  def initialize(user_id, api_token)
    @client = Faraday.new(:url => CONFIG_ZENDESK_URL) do |conn|
      conn.request :json // headerにapplication/jsonを入れる
      conn.adapter Faraday.default_adapter
      conn.response :json, :content_type => /\bjson$/
      conn.basic_auth("#{user_id}/token", api_token)
    end
  end

  def get_zendesk_custom_field_master
    zendesk_custom_field_master = {}
    res = @client.get "/api/v2/ticket_fields.json"
    zendesk_fields = res.body["ticket_fields"]
    zendesk_fields.each do |zendesk_field|
      zendesk_custom_field_master.store(zendesk_field["title"], zendesk_field["id"])
    end
    zendesk_custom_field_master
  end

model reference リレーション

User

class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
      t.string :name
      t.timestamps
    end
  end
end

Comment

class CreateComments < ActiveRecord::Migration[5.0]
  def change
    create_table :comments do |t|
      t.text :text
      t.references :user, index: true, foreign_key: true
      t.timestamps
    end
  end
end

確認

レコード生成後、mysqlブラウザでリレーションが貼られていることを確認できる

user = User.create
user.comments.create

rails c -e production

問題

production環境でのrails c
以下の方法だとclassのname エラーがでない

対応方法1

DISABLE_SPRING=1 rails c -e production

以下のようにdevelopmentとproductionの両環境が起動するのを防ぐ


``` 1966622764 34984 34636 0 12:33PM ?? 0:03.89 spring app | rails-test2 | started 16 mins ago | development mode 1966622764 35103 34636 0 12:33PM ?? 0:04.36 spring app | rails-test2 | started 15 mins ago | production mode 1966622764 34636 1 0 12:31PM ttys001 0:00.67 spring server | rails-test2 | started 17 mins ago ```

対応方法2

プロセスをkillする

// プロセス確認
ps aux | grep spring

// kill
kill -9 {spring server のプロセスID}

参考
http://qiita.com/yokozawa/items/7b92c260f8c3dfec8e28