読者です 読者をやめる 読者になる 読者になる

IT分からんわ~_~;

IT色々お勉強中のブログ

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)

rails ファイルアップロードなんどやっても忘れるのでメモ

ジェネレータでup用クラス作成

rails g uploader Image

つけた名前のあとにUploaderて名前がついたファイルが出来るっぽい

モデルとアップデートファイルを結びつける

  mount_uploader :about_image1, ImageUploder
  mount_uploader :about_image2,ImageUploder

S3に入れる場合 initializersにcarrierwave.rbとか作って設定入れる

Uploaderファイルを変更

  include CarrierWave::RMagick

  #S3に上げるのでfogを使う
  storage :fog
  #S3保存するディレクトリ場所
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
  #キャッシュファイルの置き場所をルートから変えたい時設定
  def cache_dir
    "uploads_tmp/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
  #変換したファイルのファイル規則
  def filename
    "#{secure_token}.#{file.extension}" if original_filename.present?
  end

  protected
  def secure_token
    var = :"@#{mounted_as}_secure_token"
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
  end

上でファイルと結びつけたカラムをマイグレーションで作成、複数の場合はファイル保存用テーブル作成

class NoticeFile < ActiveRecord::Base
  belongs_to :hogeration

  acts_as_paranoid

  mount_uploader :file_path, NoticeUploader
end

viewを準備 hiddenフィールドをつけるとバリでショーンエラーになっても値が消えない。でもモデルに定義されてないとダメっぽ‥

  .row
    .col-xs-12.col-sm-4
      = f.label "添付ファイル"
    .col-xs-12.col-sm-8
      - (1..3).each do |key|
        = f.file_field "about_image#{key}".to_sym, class: 'file-inline'
        = f.hidden_field :"about_image#{key}_cache"

後は適当にコントローラで保存すればおk ←書くのがメンドクサクなった

メソッドの定義場所を調べる方法

methodで#Methodを取り出す

(byebug) m=co.method(:is_entry?)
#<Method: Hoge#is_entry?>
(byebug) m.source_location
["(eval)", 1]
(byebug) m.owner

hoge.methods.grep /target/i
hoge.methods - Object.methods

rails n+1解決のincludesの使い方すぐ忘れるのでまとめ

hoge has_many pogeの場合

Hoge.includes(:poges)

複数の場合

Hoge.includes(:poges,:ages)

ネストされたリレーションの場合

Hoge.includes(:poges,ages:[:doge,boge])
//またはcomの下にtranslationsがある場合
includes(colb: [com: :translations])

includes (ActiveRecord::QueryMethods) - APIdock

↓ちなみに

ActiveRecordでのレコード数のカウント方法

count SQLのCOUNTを使ってカウント(キャッシュ使わない length SQLの実行結果の行数をカウント(キャッシュ使う size SQLのCOUNTを使ってカウント(キャッシュ使う

react学習中

constructor: (props)->

コンポーネントがマウントされる前に呼ばれる。コンストラクタを自分で実装したい場合は

super(props)

を必ず呼ばなければならない。状態を初期化する場所 propsはreadonly stateは変更可能 defaultはpropsとして自分自身の値を参照する場合はhoge デフォルト値を設定する場合はage

    this.state =
      hoge: this.props.hoge
      age: 'age'
componentDidMount: ->

このメソッドはコンポーネントレンダリングされた時にReactが自動で呼び出すメソッドです。Reactではthis.setState()メソッドが呼ばれると新しくstateを設定すると同時に再レンダリングを行います。このcomponentDidMount()メソッドはサーバーからデータを取得してそのデータを元にコンポーネントの再レンダリングを行っています。コンポーネント作成後に実行されるようになっています

  • イベントハンドラ イベントが発生したときに呼び出される処理のこと JavaScriptにおける「イベントをキャッチするグローブ」のこと

  • e.currentTarget.value イベントバブルにおける現在のイベントのDOM要素を返すプロパティ。

  • イベントバブルとは、子要素のイベントが発生すると、その親要素や先祖要素の同じタイプのイベントが発生すること。