諸行無常

IT色々お勉強中のブログ

よくあるgem libv8とtherubyracerのインストールでエラーになるやつ

An error occurred while installing libv8 (3.16.14.7), and Bundler cannot continue.

libv8はjavascript v8の何からしい

bundle config build.libv8 --with-system-v8

こうするとlibv8はインストールできるがtherubyracerでエラー

An error occurred while installing therubyracer (0.12.2), and Bundler cannot continue.

~/.bundle/configの以下を消して

UNDLE_BUILD__NOKOGIRI: "--use-system-libraries"
BUNDLE_BUILD__LIBV8: "--with-system-v8"
bundle update libv8

動いたね

d.hatena.ne.jp

window.onloadと$(document).readyの違い

  • window.onload onloadイベント発生時に実行されますが、 これはDOMツリーの構築だけでなく、画像や他の全てのデータの 読み込みが完了した時 1つしか実行されない
window.onload = ()->
  $('.js-bootstrap-switch').bootstrapSwitch()
  • $(document).ready こちらは画像の読み込みなどは待たず、 DOMツリーの構築が終わった時点で実行されます。window.onloadで指定されているものよりも先に実行されます。
$(document).ready(function(){
  console.log('ready 1');
});

rails db index名長すぎて怒られる

  • index名長すぎて怒れれたので以下のようにnameを指定してみる
  def change
    create_table :pogehoge_members_permissions do |t|
      t.references :pogehoge_member, index: true, foreign_key: true
      t.references :pogehoge_member_permission, index: true, name: 'index_om_permissions_on_om_permission_id', foreign_key: true

      t.timestamps null: false
    end
  end
  • んっ、まだ怒られる↓
ArgumentError: Index name 'index_pogehoge_members_permissions_on_pogehoge_member_permission_id' on table 'pogehoge_members_permissions' is too long; the limit is 63 characters
  • hashに入れて指定したら怒られないのね、、
  def change
    create_table :pogehoge_members_permissions do |t|
      t.references :pogehoge_member, index: true, foreign_key: true
      t.references :pogehoge_member_permission, index: { name: 'index_om_permissions_on_om_permission_id' }, foreign_key: true

      t.timestamps null: false
    end
  end

rails/schema_definitions.rb at 4-2-stable · rails/rails · GitHub

rake taskの作り方

  • rake taskの作り方、何度やってもアホなので忘れてしまうのでメモ
rails g task hogehoges
  • taskできるので処理を追加

  • desc は説明

  • PogeNewsのpoge_idを一括更新

namespace :hogehoges do
  desc "hogehoges migration"
  task migrate_all: :environment do
    domain = ENV['DOMAIN'].presence || "hogehoges"
    hogehoges = Poge.find_by!(domain: domain)
    PogeNews.where(poge_id: nil).update_all(poge_id: hogehoges.id)
  end
end
  • taskに登録されてるか確認
rake -vT
  • 実行
rake hogehoges:migrate_all

bootstrap-switch-railsを使う

radioボックスをかっこよくしたかったんで

Gemfile

gem 'bootstrap-switch-rails', '~> 3.3.1'

application.js

//= require bootstrap-switch

javascripts設定

$("body.news").ready ->
  $('input:checkbox').bootstrapSwitch()

あとはviewに普通に書くだけ、してしたい場合はオプション設定

      %td
        = f.check_box :is_shown
      %td
        = f.check_box :is_shown, data: {size:'small', 'on-color'=>'default','on-text'=>'YES', 'off-text'=>'NO' }

www.diogonunes.com

www.jque.re

gem AASMを使う

  • gem AASMとは

  • rubyに有限オートマトンを追加する為のもの(ステータス管理を簡単にするもの)

  • class or moduleに定義する↓

#AASMをinclude
    include AASM
#columnで対象のカラム、enum使う場合はenum:true
    aasm column: :hoge, enum: false do
# 使うステータスをstate で書く after_enterはそのステータスの時に実行する処理
      state :runnning, initial: true, after_enter: :after_poge
      state :stopping
      state :hogeing

# event イベントを定義 イベント名suggest!でステータスをfromからtoに変更出来る afterでステータス変更後の処理を定義出来る
      event :suggest, after: :stared_poge do
        transitions from: :entry, to: :suggestion
        transitions from: :hoge_entry, to: :hoge_suggestion
      end

# 上で設定したコールバック
  def stared_poge
    p 'aho'
  end

その他、

  1. 定義してないステータスに変えようとするとAASM::InvalidTransitionエラーになる。設定でtrue,falseを返すようにもできる

  2. @hoge.aasm.states(permitted: true).map(&:name) で@hogeで変更できるステータスを出せるよ

GitHub - aasm/aasm: AASM - State machines for Ruby classes (plain Ruby, ActiveRecord, Mongoid, MongoMapper)