Ruby(Ruby on Rails)で、使わなくなったメソッドをdepricatedにする
ある程度コードを書いていると、使わなくなったメソッドや、新しいメソッドを作ったので使って欲しくないメソッドなどが多々出てくるかと思います。 コメントで書いておいても、使う人はいるし、既存コードで知らぬ間に使ってあったりもします。 そんな時は depricatedをログに出力するようにしてしまいましょう。 そうすれば、その処理を通るたびにワーニングとしてdepricatedなメッセージが出力されるので 対処しやくすなります。 書き方としては、 def old_method warn " ...
RailsからMySQLのテーブルを作成する時にLONGBLOBなカラムを作成する方法
RailsからMySQLのテーブルを作成するには Railsのマイグレート機能には、カラム属性としてbinaryがあるのですが、これを指定してもMySQL上ではBLOBというカラム属性になります。 構文としては create_table :user_photos do |t| t.string :name t.binary :photo_image end もっと大容量のLONGBLOBが欲しい! という時にはbinaryの所にオプションで:limit => 16.megabyte ...
ActiveRecordのscopeで作成した条件などをSQLとして出力する
scope :active, where('deleted_at is null') というスコープを設定したとして この条件を含むSQLをコード内で取得したい場合ってありますよね。 SQL書いてでゴニョゴニョしたい場合とか…。 そんな時には Article.active.to_sql としてやれば、 select * from articles where deleted_at is null というSQLが取得出来ます。 参考例 # === タグ class Tag < Act ...
DBとは関係ないフォームの項目をバリデートする
class ActiveForm include ActiveModel::Conversion extend ActiveModel::Naming include ActiveModel::Validations def persisted?; false; end def initialize(attributes = {}) attributes.each do |name, value| send("#{name}=", value) rescue nil end ...
will_paginateでSQLを直接実行した結果をwill_paginate対応にする
sql = " SELECT * FROM users WHERE created_at >= '#{2.weeks.ago}' ORDER BY created_at DESC " @users = User.paginate_by_sql(sql, :page => params, :per_page => 20) こんな感じ
Rails 3 用のacts_as_paranoid
Rails 2.x系で、論理削除と言ったら、もうこれ!というのが acts_as_paranoid でした。 Rails 3.x系では rails3_acts_as_paranoid を使います。 インストールの方法は GemFileに gem "rails3_acts_as_paranoid", "~>0.2.0" と追記して bundle実行 ※Rails3.1の場合は、GemFileに書くプラグインのバージョンが"~>0.1.4"になります。 ※Rails3.0の場合は、Gem ...
Rails 3.2.8をUbuntuに一からインストールしてみる
UbuntuにRails3.2.8の実行環境を一からインストールしてみます。 Ubuntuは12.04を使用します。 まずは Rubyから、と言いたい所ですが、必要パッケージ類から sudo apt-get install make build-essential libssl-dev zlib1g-dev \ apache2-mpm-prefork apache2-prefork-dev libapr1-dev libaprutil1-dev \ libcurl4-openssl-dev li ...
Rails 3 の環境でstylesheetにlessを使う
Rails 3.2では、javascriptやstylesheetはassetにまとめられます。 ここにまとめられたものは 例えばstylesheetであれば自動的に「コントローラ名.css.scss」がcssコンパイルされ、 リンクされます。自分で指定する場合は <%= stylesheet_link_tag "users" %> とすればリンク出来ます。 さて、Rails3.2では、stylesheetはscssが、JavaScriptはCoffeScriptがそれぞれ 標準で使 ...
[Ruby on Rails 3]SolrをRuby on Rails 3から使う
Ruby on RailsからSolrを使うには、このプラグインを使うと良さそうだ sunspot_rails ホームページは sunspotプロジェクトの一部になっています。 インストールは Ruby on Rails 3の場合 gemfileに gem 'sunspot_rails' gem 'sunspot_solr' # optional pre-packaged Solr distribution for use in development を追加 あとは bundle instal ...
[Ruby on Rails]バッチ処理のrbをテストする方法
バッチ処理として書いたrbファイルをテストする場合 テストケース内で system("ruby バッチファイル") としても良いが たとえばTimecopで日付を固定してテストする場合には具合が良くない。 バッチのプロセスが別プロセスで動くため、Timecopの設定がバッチに反映されない。 なので systemで呼び出している部分を load "バッチファイル" というように、loadに変えると、そのバッチ処理が都度ロードされるので テストを実行しているプ ...
Railsで日付処理
Railsで日付処理は、意外と簡単に出来たりする。 1日前 1.days.ago 1日後 1.days.from_now 1ヶ月前 1.months.ago 1ヶ月後 1.months.from_now 1年前 1.years.ago 1年後 1.years.from_now また、本日の開始日時として、たとえば 2011-10-01 00:00:00 という情報を取りたい場合 Date.today.beginning_of_day 逆に 2011-10-01 23:59:59 という情報を取り ...
ホスト名とポート番号を取得する方法
Railsで… ホスト名(gendosu.jpという感じ)を得る request.host ホスト名:ポート番号(gendosu.jp:80という感じ)を得る request.host_with_port
Rails 2.*系で「rake/rdoctask is deprecated. Use rdoc/task instead (in RDoc 2.4.2+)」エラー
Rails 2.*系のプロジェクトで、rakeコマンドをたたくと、 rake/rdoctask is deprecated. Use rdoc/task instead (in RDoc 2.4.2+) というエラーが発生することがある。 このエラーは rake のバージョンが新しすぎるのが原因。 基本的にRails3.0.5より前のRailsでは、rakeのバージョンは0.8.7を使う。 新しいrakeが入っている場合 gem uninstall rake gem install rake - ...
Rails 3.0.5 で「uninitialized constant Rake::DSL」
uninitialized constant Rake::DSLの対処
Aptana Studio 3 でのAptanaのテーマ設定
Aptana Studio 3 にしたところ、Ruby on Railsの表示にテーマが適用されるようになった。 これはこれで、背景が黒でかっこいいのだが、SVNのベースリビジョンとの比較をかけたりすると、すべて真っ黒で良く見えない。 簡単に行くなら、テーマを変えるのがいいが、せっかくなので、Aptana Studio 3 のテーマのままでなんとかしたい。 ま、背景黒というのは諦めて、白くする 白くすると、キーワードなどが色が薄すぎて見えない ので、色を濃くする。 そんな感じのことを地道にやって ...
Aptana Studio 3 で、Shift Right, Shift Leftのショートカットキー
Aptana Studio 3 で、Shift Right, Shift Leftのショートカットキーを設定する
Passengerで動かすRailsプロジェクトで、rMagickを使う時の設定
ImageMagickのをソースからインストール ※/usr/localに入るので、rootで実行 ./configure make install /usr/local/libをライブラリ登録 /etc/ld.so.conf.dに ImageMagick.confファイルを作成 ファイルの中に /usr/local/lib を記入 ldconfigを実行 rmagickのインストール gem install rmagick
rescue_from でコントローラごとに例外時のアクションを指定
コントローラで rescue_from を指定することで、そのコントローラで例外が発生したときなどに実行する処理を指定することが出来る。 class UserController < WomanController rescue_from Exception, :with => :catch_exception def catch_exception render :file => '/public/404.html', :status => 404 end end
Rails3 で、日本語化
Rails3の日本語化をする #config/application.rbファイルの編集 このファイルに日本語で動くことを指定する設定を追加する config.i18n.default_locale = :jp #config/localesディレクトリにjp.ymlファイルを設置 jp.ymlファイルの中身は "jp": errors: template: header: one: "1 個のエラーが発生しました" other: "{{count}} 個のエラーが発生しました" # The v ...
Rails3で、productionで起動したときにpublic内のファイルがnot foundになる件
rails3のプロジェクトを作成し、起動時に rails s -e production という感じでプロダクションモードで起動したときに、なぜかpublic配下のファイルがすべてNot Foundになってしまう。 これは、config/environments/production.rb ファイルの中の config.serve_static_assetsという設定があるのだが、これをtrueに設定してやることで、表示できるようになる。 ちなみに、サーバに配置してpassengerなどでpro ...