特定のキーを除いたhashを返す
今までdeleteでチクチク消したり、rejectで該当キーをひっかけてhash作り直しリしてました。
exceptなんてあったんですね。
1
|
|
今までdeleteでチクチク消したり、rejectで該当キーをひっかけてhash作り直しリしてました。
exceptなんてあったんですね。
1
|
|
環境はこちら
activerecord(4.1.6)
rails4 acts as _paranoid (0.1.4)
has manyのリレーション先でacts as paranoid指定しているのですが、
nested attributes for リレーション先, allow destroy : true
で何故か物理削除になっていまったので調べてみました。
結論としては
lib/active record/associations/has many association.rb
の112行目で
records.each(&:destroy!)
とdestroy!で消していて、acts as _paranoidのdestroy!は物理削除になるためでした。
何故destroyに!がついているのか
上記が定義されているdelete recordsメソッドを遡ってみます。
delete recordsメソッドはlib/active record/associations/collection association.rb
のremove _recordsの中で呼ばれています(ソースでは492行目)
1 2 3 4 5 6 7 8 9 |
|
んでこれはどこで呼ばれるかというとここで呼ばれています(ソースでは485行目)
1 2 3 4 5 6 7 8 9 10 11 12 |
|
transactionで囲まれています。
ということでdestroyに失敗した時にロールバックするために!をつけているようです。
なのでparanoidのdestroy!をalias method chainで物理削除にしてしまうか。
上記のrecords.each(&:destroy!)をなんとか書き換えてあげると治りそうですね。
今回はこうやって直しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
今回ソース読んでいて知ったんですけど、has manyって削除する時に
before remove
after _remove
ってコールバックが発生するんですね。知らなかった。
Nokogiriを使ってhelperメソッドで特定のinputに属性(クラス名)を追加したくなったのでやってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Nokogiri::HTML.parseだとDOCTYPEとか とか余計なものがついてくる。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
そういう場合はDocumentFragmentを使うと部分的にhtmlを使える。
@indexで取れます。
1 2 3 4 5 |
|
その他に@firstには最初の一回目のループの時にはtrueが
@lastには最後のループの時にはtrueが入るようです。
@indexは入力欄 _1とかの1とか表示する時に使えそうですね。
2次元配列とか多次元配列を回す時はこうですね。
1 2 3 4 5 6 7 8 9 |
|
ちなみにでコメントです。
という書き方もできます。
勉強がてらRailsのプロジェクトでBackBone.jsでテンプレートにはhandlebarsを使って処理を書いてみました。
viewがslimなのでslimbarsで書いてます。
変数を出力しようとしたら以下のエラー
Unknown line indicator
viewファイルはこんな感じ
1 2 3 |
|
ただしくはこう
1 2 3 |
|
hamlbarsではこう書けてしまうので、slimで書く場合は注意が必要だなと思いました。
1 2 3 |
|
小ネタも小ネタでした。
しかしeachの中ではslimの記法使えないのかな?
こうやらないと出力されない・・・
1 2 3 4 |
|
おかあさんといっしょを娘が見るので、毎朝のテレビチャンネルはEテレです。
さてrailsでapp/model/concerns以下のモジュールを勝手にapp/modelにincludeしたいと考えました。
命名規則でファイルを拾って、includeすることにします。
例えば以下のファイル名をつけた場合に
app/model/user.rb
app/model/user auto load _concern.rb
userクラスに自動でuser auto load _concern.rbの内容がincludeされる感じです。
config/initializerに置きます。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
でもこのプロジェクトにはmodelクラスを拡張するプログラムがlib下にあります。
それを読み込まない限りはmodelを参照するとエラーになるようになっています(上記class _name[0].classify.constantizeでエラーとなる)
そこでlib以下のそのプログラム群を読み込んだ後に読み込むようにしたいと思います。
まず先ほどのコードを以下のようにActiveSupport.on _loadで囲みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
lib下のプログラム群で処理が終わった後に以下を差し込みます。
1
|
|
そうするとrun load hooksが呼ばれたタイミングでhogeがついていてるActiveSupport.on _loadのブロック処理が開始されます。
rubyXLで100以上シートのあるエクセルファイルを読み出すスクリプトを書いていて、
現在の処理中のシート/シートの総数でプログレスバーを表示することはしたけど、
ファイル読み込み中(5~7秒ぐらいかかる)はなんにもコンソールに表示されない状態が物足りなくて、
ファイルの読み込み中はローディングチックなのを出すようにした。
読み込みと別でThread生成して、そのThread内で1秒毎に >と > >と > > >を出している。
読み込みが完了したらThreadをkillしてる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
業務でエクセルを使うことになったので調べてました。
↓Qiitaの素晴らしいまとめ
RailsでExcelを扱うGemまとめ
http://qiita.com/Kta-M/items/02a2c41c5624f75498aa
↓情報はこの辺を見ました
http://stackoverflow.com/questions/17320645/axlsx-building-dynamic-columns
あまりエクセルのリストを作成する情報がなかったので書いておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
調べてみたら自分所のDBからFacebookの情報を消すだけのものが多くて、大元のFacebookのアプリ設定から削除するのがあんまり載ってなかったようなきがするので
以下の感じで、連携解除ができます。
1 2 3 4 5 6 |
|
珍しくPHPでした。
s3 getter.rbとか名前つけて保存して
ruby s3 getter.rbとかで起動すると
最初にbucket選ぶ選択肢が出てきて選択すると、bucketのディレクトリかファイルか、ファイル全てダウンロードが選べ。
ディレクトリを選ぶと再帰的にまたディレクトリかファイルかファイル全てをダウンロードが選べます。
ファイルもしくは全てダウンロードを選ぶと、ダウンロードと同時に解答するか選べ(すいません。現状gzの解凍のみ)
また抽出するファイル名を正規表現で絞り込めるかを選べます。
動くの重視で片手間に作ったのでノー例外処理でございます。
gz圧縮以外にも対応したいとかあれば、ご自由に改変してお使いください。
Gist
https://gist.github.com/YoshitsuguFujii/349069b2e74c28153a17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
|