Category Archives: rails

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 エラーがでない

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 ```

form_for でモデルにないプロパティを使う場合

model

class Club < ApplicationRecord
has_many :contents, class_name: ‘ClubContent’

// form_forでネスト先を呼び出せる
accepts_nested_attributes_for :contents, allow_destroy: true

// モデルに存在しないプロパティを使えるように設定
attr_accessor :user_ids
end

new.html.haml

%h2 clubs#new
= form_for @club do |f|
  %table
    %tr
      = f.fields_for :contents do |content|
        %td
          = content.label :部活名
        %td
          = content.text_field :部活名
    %tr
      %td 部員
      %td
        = f.select :user_ids, @users.map{|u| [u.氏名, u.id]}, { include_blank: true }, { class: 'chosen-select', multiple: true }
  = f.submit

リレーション先のレコードも合わせて作成

モデル

class Club < ApplicationRecord
  has_many :joining_clubs
  has_many :users, through: :joining_clubs
  accepts_nested_attributes_for :users
end

作成

// リレーション先のusersも合わせて作成できる
club = Club.create({"名前_漢字"=>"テスト部","users_attributes"=>[{"氏名"=>"みやもと"}]})

// 確認 usersを確認できる
club.users

AJAX 検索

gem install

gem 'ransack'

コントローラー

class ClubsController < ApplicationController
  def index
    @q = Club.ransack(search_params)
    if params[:q]
      @clubs = @q.result
    else
      @clubs = []
    end
  end

view

views/club/index.html.haml

%h2 clubs#index
= search_form_for(@q, remote:true) do |f|
  = f.label "部活名"
  = f.text_field :名前_漢字_cont
  = f.submit

#clubs
  - if @clubs.count > 0
    = render partial: "club", :collection => @clubs

= link_to "create club", new_club_path

views/club/index.js.haml

$('#clubs').html("#{escape_javascript(render partial: 'club', :collection => @clubs)}")

views/club/_club.html.haml