model.changesで強制的に変更したことにする方法

RailsのActiveModelのDirtyでは変更前、変更後、変更したかなどモデルクラスの新旧状態が取れる。
http://qiita.com/kakkunpakkun/items/b286f789ca8590104ad1

このdirtyを使って変更してないけど変更したことにしたい(observerを再実行したい時とか)に使える技

1
2
3
4
5
6
7
8
9
10
user = User.first
user.changes # => {}
user.created_at_will_change! # => => 2015-01-16 20:09:59 +0900
user.changes
# => {
#  "created_at" => [
#    [0] 2015-01-16 20:09:59 +0900,
#    [1] 2015-01-16 20:09:59 +0900
#   ]
# }

属性名_will_change!で新旧に同じ値が設定される。

なんでこんなことやりたかったかっていうとobserverでuserのnameの値が変更されたらapiを叩く処理を書いていたのだけど、急遽全件apiを再実行する必要があり強制的にnameが変更されたことにしたかったため調べたらあったというお話


[小ネタ]Railsを使っていてAngularのform validationだけしたい時

railsでシステムを作っていて、ここはゴリゴリ書くようなところじゃないけどformのvalidationだけangularの機能使いたくなったんですが。 railsはname属性に[]を使うので、この場合のng-show内部の指定がわからなかったので備忘録も兼ねて。

1
2
3
4
form name="new_form"
  input name="price[hoge]" ng-model="price" ng-pattern="/^([1-9]\\d*|0)(\\.\\d+)?$/" required="" type="text" /
  span.text-error ng-show="newForm['price[hoge]'].$error.required"  ※
  span.text-error ng-show="newForm['price[hoge]'].$error.pattern"  This is not a valid dollar.

formのnameに指定されいるものを[]とシングルクォートで囲むといけます。


どうしようもないお客さんとやってく方法

どうしようもないお客さんというのはいるもんですが、
サラリーマンをやっているとどうしても対応せざるを得ないわけです。
そんなお客さんにこの度ちょっと効果的なやり方で対応できました。

久しぶりにはっきりいって本気で仕事したくなくなったお客さん登場です。
別でかかえていた案件もリリース直前でパツっていたこともあり、飛んでくるタスクをついつい放置してしまいそうです。

そこでどうしたら効果的にモチベーションを保ちつつ仕事を進められたかというと。

Read on →

Rails 便利なテクニック その1

日常コード書いてて便利だなぁと思った技とかを思い出したら不定期に書いていきます。

よくメニューをulとliを使ってタブで表示することがあると思います。
例えばタブは以下の条件で表示されます

  • ユーザの年齢が20歳以上なら表示するタブA
  • ユーザの性別が男性なら表示するタブB
  • ユーザの性別が女性なら表示するタブC
  • ユーザの性別が男性でかつ20歳以上なら表示するタブD

実装が終わって総合テストがはじまります。

ここでチケットがあがってきます。

『タブが一つしか出力されない場合はタブを非表示にしてください。』

さてどうしましょう?

Read on →

Cronがutcで動いてる場合に

Centosでtimezoneの設定が日本時間にしているのにcronが指定時刻に動かず調べました。
/var/log/cronを見るとログの時間が-9時間。
JSTで動いてないっぽいです。

以下のコマンドでcronのログの時刻も含めて治ります。

Read on →

RailsConfig(現Config)で読み込んでいるファイルのパスを得る

内部的にrails_envを書き換えたりしていて、rails_configの値がただしくRAILS_ENVの設定通りにファイルを読み込んでくれない事象が発生したので。

rails_config (0.4.2)

1
2
irb(main):014:0> Settings.instance_variable_get(:@config_sources)
=> [#<RailsConfig::Sources::YAMLSource:0x0055a28d40ab48 @path="Rails_rootへのパス/current/config/settings.yml">, #<RailsConfig::Sources::YAMLSource:0x0055a28d40aa30 @path="Rails_rootへのパス/current/config/settings/hoge.yml">, #<RailsConfig::Sources::YAMLSource:0x0055a28d40a9e0 @path="Rails_rootへのパス/current/config/environments/hoge.yml">]




Go言語を使ってローカルマシン上でbotを動かしSlackでtodo管理をする

前回の続編です。

Go言語を使ってローカルマシンに簡易botを作ってSlackに投稿

botを使ったtodo機能をslackに付与するべくgoのコードを書いてみました。

todo コマンド

という感じでつぶやくと、

チャンネル毎にtodoリストが管理できるようにしたいと思います。
dbがなくても動くようにファイルに保存します。

操作 コマンド
追加 add 追加したいテキスト
削除 del 削除したいテキスト
一覧 list
全削除 clear

こんな感じで動きます。

todobot

便利そうですね!

Read on →