飲んだり寝たり

だいたいメモ

Paperclipのsytlesやconvert_optionsの変更を既存のデータにも適用する

例えば後付で投稿画像を640px x 640pxに統一するようにしたときなど. 既存のデータにもその変更を反映したいときは

1
rake paperclip:refresh:missing_styles

とすればPaperclipで管理している全てのデータ(original以外)を現在のルールで再生成してくれる. ただこれだと変更に関係ないクラスも(ex: BookCoverだけ変更したのにUserImageも)再生成されるので非効率. なので

1
2
3
4
5
BookCover.all.each do |cover|
  cover.image.reprocess!(*nil)
  if cover.errors.present?
    # エラー処理
  end

のようにすれば特定のクラスのデータだけ再生成できる.

Railsで多対多の関係を表現する

例えばUserモデルとCompanyモデルが多対多(お互いhas_many)の関係であることを表現するときは, 中間のモデルCompaniesUser(アルファベット順にならべる)を使う.

それぞれコードは以下のようになる.

1
2
3
4
5
# app/models/user.rb
class User < ActiveRecord::Base
  has_many :companies_users
  has_many :companies, through: :companies_users
end
1
2
3
4
5
# app/models/company.rb
class Company < ActiveRecord::Base
  has_many :companies_users
  has_many :users, through: :companies_users
end
1
2
3
4
5
# app/models/companies_user.rb
class CompaniesUser < ActiveRecord::Base
  belongs_to :company
  belongs_to :user
end

Rails4でObserverを使う

Rails4ではobserversが削除されているので, 使用したい場合はrails-observersgemをインストールする.

1
gem 'rails-observers'

もしくはActiveRecordのcallbackで

1
2
3
4
5
class Hoge < ActiveRecord::Base
  before_save do
    # 何か処理
  end
end

1
2
3
4
5
6
7
class Hoge < ActiveRecord::Base
  before_save :some_action

  def some_action
    # 何か処理
  end
end

のようにしてもよい.

RailsでSQLiteを操作する

MySQLだとmysql -u root -p DATABASE_NAMEとかすれば直接操作出来るんだけどSQLiteだとどうすんのかなー, って思ってたら

1
rails db

でいいっぽい. もちろんMySQLをDBに指定していたら上のコマンドでMySQLが起動される.

ちなみに

1
2
3
4
5
6
7
8
終了
.exit or .quit

テーブル一覧
.tables

その他コマンド
.help

日記 1

ブログしばらく書いてないと思ったら一ヶ月ぐらい書いてなかった. しばらく書いてないと次書くときは高度なこと書かなきゃいけない気がして余計書きにくい. Railsで多対多の関係表現するのどうするんだっけとかいつも忘れるのでメモっておきたいんだけど書いてないとこれじゃショボすぎるからやめとこうと思って書かない. 結果またググることになる.

といっても自分で制限かけてるだけだから普段からショボいこと書いてたら遠慮なくショボいこと書けるようになると思った. 日記だとどう頑張ってもショボいことしか書けないけど書くと一日の振り返り出来そうだし都合良い. あと毎日続けたいので出来るだけ考えなくても書けるようにしたい. 趣味はマリンスポーツですさんの日記ぽい文体だとダラダラ書ける感じがして良い. そのうちもっと楽なの思いつくかもしれないけどとりあえずこんな書き方でやろうと思う.