date_select メソッドを呼ぶと can't convert Symbol into String とエラー
現象
date_select メソッドを呼ぶと
can't convert Symbol into String
というエラーが起きる。
解決策
ja.yml に order: からの4行を追加して解決しました。
ja: date: + order: + - :year + - :month + - :day
原因
config/application.rb において
config.i18n.default_locale = :ja
のように default_locale を日本語にしている場合に発生するようです。
Rails で STI を使ったのでメモを残します
はじめに
自分用メモです。
参考
実装ダイジェスト
db/schema.rb
create_table "images", :force => true do |t| t.string "type" # ここに各モデルのタイプが入る ex. "PngImage", "JpegImage" t.string "path" end
app/models/image.rb
class Image < ActiveRecord::Base # ex. belongs_to user とか end
app/models/png_image.rb
class PngImage < Image # 個別の処理があれば end
app/models/jpeg_image.rb
class JpegImage < Image # 個別の処理があれば end
モデル作成
# これで type に 'PngImage' が入った Imageテーブルのカラムがつくられる PngImage.create!(path: '/path/to/img')
Rackレイヤーでリダイレクトする
きっかけ(2013/4/19 更新)
D.D. を Gogengo! にリニューアルするにあたって、古いドメイン(http://www.ddic.jp/)を新しいドメイン(http://gogengo.me/)にリダイレクトしたくなりました。
Railsアプリを Thin で動かしていました。例えばリダイレクトするだけのために Nginx を導入するのも大げさなので Rackレイヤーでリダイレクトすることにしました。『How to redirect without www using Rails 3 / Rack? - Stack Overflow』を参考にしました。
※なお、このエントリを書いた 3ヶ月後に Gogengo! を Nginx + Unicorn で動かすよう変更しました。興味のある方はこちらも合わせてお読みください。
やりかた(2013/4/19 更新)
/config/application.rb
module Gogengo class Application < Rails::Application ... config.autoload_paths += %W(#{Rails.root}/lib) ... end end
/config/environments/production.rb
Gogengo::Application.configure do ... config.middleware.use 'RequestRedirector' ... end
/lib/request_redirector.rb
class RequestRedirector OLD_DOMAIN = 'www.ddic.jp' NEW_DOMAIN = 'gogengo.me' def initialize(app) @app = app end def call(env) request = Rack::Request.new(env) if request.host.starts_with?(OLD_DOMAIN) [301, {'Location' => request.url.sub(OLD_DOMAIN, NEW_DOMAIN)}, self] else @app.call(env) end end def each(&block) end end
確認
Thin を再起動して http://www.ddic.jp/ にアクセスしたら、ちゃんと http://gogengo.me/ にリダイレクトされました!