Hatena::ブログ(Diary)

in the box

2012-07-20

追記

role 単位でしか指定できなくてだるいなーと思ってたけど model に対する操作ごとに role を作るなりすればいい。 action に model を紐付けるのではなく model に action を紐付けるべき。

development, test 環境では config.active_record.mass_assignment_sanitizer = :strict となっているので確認漏れもないだろう。

production 環境ではデフォルトの :logger となっているので warning が出力されるのみで例外は発生しない。



作成時には設定させるけど更新時には設定させたくないみたいなときにいい方法ないかなーと探したけど見つからなかったで作った。

action でわざわざ個別に代入するみたいなことしなくていいので controller がシンプルになる。

view は readonly な項目だけ input じゃなくすみたいな面倒なことせずに disabled にしておけばいい。

どうせ disabled を外すような人は別の手段で post してくるしどちらにしてもこれで防げる。

2012-07-06

[]Rails 3.1 以降の Assets Pipeline における処理単位の分割

なかなかしっくりくるものが見つからなかったんだけどこれがぐっときたので自分なりにまとめてみた。


application.html.haml

%body{:id => params[:controller].sub('/', '-'), :class => params[:action]}

router.js.coffee

window.azcat ||= {}
window.azcat.routes ||= {}

$.extend window.azcat,
  dispatch: ->
    body = $('body')
    controller = body.attr 'id'
    action = body.attr 'class'

    name = (token.replace(/^\w/g, (s) -> s.toUpperCase()) for token in controller.split('-')).join('')
    klass = window.azcat.routes[name]
    if klass?
      router = new klass controller, action
      router[action]?()

    return

$ ->
  window.azcat.dispatch()
  return

peroperos.js.coffee

class Peroperos
  constructor: ->
    console.log 'Peroperos#constructor'

  index: ->
    console.log 'Peroperos#index'

  show: ->
    console.log 'Peroperos#show'

  edit: ->
    console.log 'Peroperos#edit'


window.azcat.routes.Peroperos = Peroperos

元記事みたいに data attribute にそのまま型仕込んでもいいけど、なんとなく大文字が入るのが嫌だったのと css で簡単に書けるように id, class に controller, action を設定しといてあとで js で型名に変換するようにした。

routes に型を設定するのがちょっと冗長だけど分岐を意識しなくてよくなったのでだいぶ良い感じなんじゃないでしょうか。

しばらくこれで運用してみる。

2012-03-28

[] Ruby で Maybe モナドっぽいもの

Ruby に寄せたのでモナド則ちゃんと満たしてないけど見た目だけはかなり Haskell ぽくなったんじゃないかな。

2012-03-08

[]LazyEnumerable

map とかを遅延評価させてみようという試み。

ruby だとなんかこれじゃない感。

Fiber いっさい触らないでいいし Enumerator すごい便利ですね。

2012-01-27

[]しょうがないにゃあ