変数の初期化

clearなんてあったんや。
http://ref.xaio.jp/ruby/classes/array/clear

今まで

1
2
array = ["hoge", "fuga"]
array = []

ってやってたのが、

1
2
array = ["hoge", "fuga"]
array.clear # => []

って書ける。より直感的ですね。

ちなみに文字列もHashもあるみたいです。

1
2
3
4
5
hash = {hoge: "fuga"}
hash.clear # {}

str = "fugafufa"
str.clar # => ""

へー。



言語毎に異なるデバッグ文を挿入

デバッグ文を仕込む場合に、私の環境ではインサートモードでCTRL+bするとデバッグ文を仕込むようにしています。
その際に言語毎(ファイルタイプ毎)に異なるデバッグ文を打ち込めるようにしたら便利すぎて辛いです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function! InsertDebugger()
    if &filetype == 'coffee' || &filetype == 'javascript'
      let debugger = "debugger"
    elseif &filetype == 'ruby'
      let debugger = "binding.pry"
    elseif &filetype == 'eruby'
      let debugger = "<% binding.pry %>"
    elseif &filetype == 'haml'
      let debugger = "- binding.pry"
    else
      let debugger = "binding.pry"
    endif

    return debugger
endfunction

inoremap <expr> <C-b> InsertDebugger()

編集中のファイルが
coffeescrptかjabascriptの場合はdebuggerを(chrome使ってるので)
rubyの場合はbinding.pryを
erbの場合は <% binding.pry % >を
hamlの場合は- binding.pryを打ち込みます。

ちなみに今編集中のファイルのファイル・タイプを知りたいばあいは該当のファイルを開いて

1
:echo &filetpye

ってうつと表示されます


vimでファイルのブックマーク

vimを使っていて。
ディレクトリはUniteBookmarkAdd使ってブックマークしてましたが。

集中的にある機能のみを重点的に編集する時に、ファイルのブックマークしたくて調べたらあった。
しかもデフォルトの機能っぽい。

Hack #16: 任意のファイルをブックマークする
http://vim-users.jp/2009/05/hack16/

例えば店舗とかっていう機能開発していて。

StoreControllerのコントロールファイルではmC
StoreのformのビューファイルではmF
StoreのindexファイルではmS
StoreのjsファイルではmJ

しとくと編集していて、すぐにコントローラ開きたい時は
`C

って押せばすぐ開く。
簡単に設定できて、即応性があるのでいい感じですね。
しかもブックマークとかにしちゃうと、設定後その機能の開発が終わったらブックマークを消さなきゃいけないと思いますが。
今なにが設定されているとか気にせずに、常に上書きで使う感じもいいです。
他にも色々便利機能ってあるのかな。

vimの本ちゃんと読まないとなー


fields_forに渡すrelationを絞る

contentモデルの下にcontent detailモデルがあって、 accepts nested attributes forしていて、fields _forを使う場合。

1
f.fields_for :content_details do |c|

って書くと、contentに紐付く全部のcontent _detailsがformとして表示されちゃう。

第二引数にインスタンスを渡せばいいみたい。

1
f.fields_for :content_details, @content.content_details.where(state = 1) do |c|

ちなみに第二引数はnilがデフォルト引数なので

1
2
f.fields_for :content_details
f.fields_for :content_details, nil

は同じ意味になるので、インスタンス変数は値を入れなければnilなので

1
fields_for :content_details, @details

ってやって、editの時だけ@detailsに値を入れるとうまく変更したいレコードのみ抽出できて、処理を切り分けられる気がします。


ある月に指定日が含まれるんか判定したい(要ActiveSupport)

ある月に指定日が含まれるんか判定したい

月のRangeオブジェクトは
Time #all _monthで取れる(要ActiveSupport)
含まれるってことはbetween?かな

1
2
3
Time.now.between?(Time.now.all_month)
# ArgumentError: wrong number of arguments (1 for 2)
# from (pry):8:in `between?'

ありゃ。
あ、include?だったかな?

1
2
Time.now.all_month.include?(Time.now)
# TypeError: can't iterate from Time

むむ。
じゃ、じゃあcovers

1
2
3
4
Time.now.all_month.cover?(Time.now)
# -> true
Time.now.all_month.cover?(Time.now.prev_month)
# ->false

できたヽ(`▽´)/


Excelとか使う時はマウス使ってたんだけど。センタークリックでMission Controlを開きたい

Mac Book Airで仕事しています。
普段はTrack pad使っているんだけど。

Excelとか使う時はやっぱりマウス使いたいってことで。
その辺に転がっていたUSBマウスを接続して作業している。

その際に他のワークスペース(デスクトップ?)に切り替えたい時はわざわざマウスから手を話して、トラックパッドの方で3本指スワイプしていた。
これが超絶面倒なので、マウスのセンタークリックでできないかとやってみたら出きた。

システム環境設定 > Mission Control

f:id:gogo  _sakura:20131113112104p:image

ただchrome使っててタブ消したい時はセンタークリックで消してたけど。
それが効かなくなるのが難点か・・・
欲張り過ぎかなぁ。

※Magic Mouseはお金ないので買えない人なのです


自分のjquery力のなさに泣けてきた話

jQuery力のなさに泣けてきた。

data-hogeにdataでアクセスできるの知らんかった
こんなのがある

1
<a href="foo" id="bar" data-count="1" data-url="http://~.com"></a>

いままではこうやって値を取得してた。

1
$('#bar').attr("data-count");

dataってあったのね。

1
$('#bar').data("count");

しかも要素に設定されているdata-属性も一気に取得もできる - > http://stackoverflow.com/questions/4187032/get-list-of-data-attributes-using-javascript-jquery

1
$('#bar').data();

当然ajaxで一気に渡せる(※coffeescript)
以下の例はリンクを押したら、どっかから何か取ってきて何かを追加してる雰囲気のやつ。

1
2
3
4
5
6
7
8
9
10
11
12
13
  $(document).on 'click', '#hoge', (event) ->

    $.ajax
      url: "どっかのURL"
      type: "GET"
      data: $(@).data()
      success: (data) ->
        $('#bar').append(data)

      error: (XMLHttpRequest, textStatus, errorThrown) ->
        console.log("XMLHttpRequest : " + XMLHttpRequest.status)
        console.log("textStatus : " + textStatus)
        console.log("errorThrown : " + errorThrown.message)

もっと早く出会いたかった・・・

ちなみに今回はお手軽にタグのdata要素に情報もたしてそれを送信する例でしたが。
フォームの値を全部キーと値のペアとかで送りたければ、serializeArrayが超ベンリです。こっちは知ってた!
http://jquery-master.net/ajax/serialize.php


js.erbファイルのデバッグ

railsでajax使って処理していて、コントローラからjsファイルを読んでviewの内容を書き換えたり、追加したりすることがあると思う。

# hogehoge.js.erb

1
$("kokonitsuika").append("<%= escape_javascript(render "partial_view") %>");

このくらいなら多分ないけど。結構複雑なjs.erbに成長しちゃってjsのデバッグをしたい時には、chromeでインスペクション開いたままdebuggerを差し込むと止まってくれるので幸せになれるかも?

1
2
debugger
$("kokonitsuika").append("<%= escape_javascript(render "partial_view") %>");

腰が痛いぞ。


arel_table使いながら、たくさんの条件を配列にいれつつ検索

何を言っているんでしょう。
コード見たほうが早いですかね

1
2
3
4
5
6
7
8
9
# andで条件組み立て
def condition
  cons = []
  cons << User.arel_table[:name].matches("%hoge%")
  cons << User.arel_table[:nick_name].matches("%fuga%")
  cons.inject(&:and)
end

user.where(condition)

配列の結合で一瞬悩んだのでメモ。
andをorにすると、どれかに一致するという条件になります。