AWS、東京リージョン
:Memo
- 転送速度はシンガポールリージョンと比べると、およそ3倍強の転送速度
- アジアではシンガポールに続く2例目のデータセンター
- 東京リージョンは現在もっとも高価だが、他のリージョンとの差は小さい
- 日本語による24時間サポートを利用できること
アーリーアクセス顧客としては、
三井物産、米ソーシャルゲーム会社Zynga、リクルートの「SUUMO」などが利用開始している
:Source
AWSが日本データセンターを運用開始、責任者に聞いた − @IT
AWSの東京リージョン開設 - c9日記 -カタヤマンがプログラマチックに今日もコードアシスト
長い文字列を省略して表示したい
truncate('1234567890ABCDE', :length => 10, :omission => '...')
=> 1234567...
:Source
ActionView::Helpers::TextHelper
irbで複数形を確認する
今更ですが、ActiveSupport::Inflectorっていうみたいですね...
$ irb >> require 'active_support' => true >> 'dog'.pluralize => "dogs" >> 'dogs'.singularize => "dog" >> exit
Source:
ActiveSupport::Inflector
ネストしたモデルの入力フォーム実装
以下(Sorce:)のURLを参考にRails3のサンプルアプリを実装してみました。
まずはscaffoldでカテゴリとサブカテゴリを作成します。
$ rails g scaffold category name:string code:string available:boolean
$ rails g scaffold sub_category category_id:integer name:string code:string available:boolean
jQueryを使いたいので、Gemfileに一行追加して
gem 'jquery-rails'
jquery-railsのインストールとマイグレーションを実行します。
$ bundle install $ rails g install:jquery $ rake db:migrate
モデルの関連付け
app/models/category.rb
class Category < ActiveRecord::Base has_many :sub_categories, :class_name => "SubCategory", :dependent => :destroy accepts_nested_attributes_for :sub_categories, :allow_destroy => true end
app/models/sub_category.rb
class SubCategory < ActiveRecord::Base belongs_to :category, :class_name => "Category" end
ヘルパーとJSの実装
app/helpers/application_helper.rb
module ApplicationHelper def link_to_remove_fields(name, f) f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)") end def link_to_add_fields(name, f, association) new_object = f.object.class.reflect_on_association(association).klass.new fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder| render("fields_" + association.to_s.singularize, :f => builder) end link_to_function(name, raw("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")) end end
子要素を追加、削除するリンクをそれぞれ追加しています。
※ 注1: link_to_add_fieldsメソッドのrenderする部分テンプレートの名前を変更しました。
※ 注2: link_to_functionの第二引数、h()→raw()に修正しました。(Rails3なので)
public/javascripts/application.js
// application_jquery.js function remove_fields(link) { $(link).prev("input[type=hidden]").val("1"); $(link).closest(".fields").hide(); } function add_fields(link, association, content) { var new_id = new Date().getTime(); var regexp = new RegExp("new_" + association, "g") $(link).parent().before(content.replace(regexp, new_id)); }
参考サイトの実装をそのままコピペ
ビューの実装
app/views/categories/_form.html.erb
<!-- ここから追加 --> <div class="field"> <%= f.fields_for :sub_categories, @sub_categories do |sub_category| %> <%= render 'fields_sub_category', {:f => sub_category} %> <% end %> <%= link_to_add_fields "新しくサブカテゴリを追加する", f, :sub_categories %> </div> <!-- ここまで --> <div class="actions"> <%= f.submit %> </div>
app/views/categories/_fields_sub_category.html.erb(sub_categories/_form.html.erbをコピーして修正)
<div class="fields"> <h2>サブカテゴリ</h2> <%= link_to_remove_fields "削除", f %> <div class="field"> <%= f.label :name %><br /> <%= f.text_field :name %> </div> <div class="field"> <%= f.label :code %><br /> <%= f.text_field :code %> </div> <div class="field"> <%= f.label :available %><br /> <%= f.check_box :available %> </div> </div>
※ 注1: div.fieldsは忘れずに指定してください。JSでエラーになってしまいます。
Source:
#196 Nested Model Form Part 1 - RailsCasts
#197 Nested Model Form Part 2 - RailsCasts
Herokuのi18n問題
Herokuにi18n対応したRails3アプリをデプロイしてみましたが、config/application.rbに設定した以下の内容が有効になりませんでした...
config/appliction.rb
class Application < Rails::Application : config.i18n.default_locale = 'ja' : end
ちょっと調べてみたところ解決策があったので、メモしておきます。
こうすればOKでしたー。
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base before_filter :set_locale def set_locale I18n.locale = "ja" || I18n.default_locale end : end
Source: ruby on rails - Heroku and i18n Problems - Stack Overflow
ファイルの拡張子を一括で変更する
for fname in *.rhtml; do mv $fname ${fname%.rhtml}.html.erb; done
Source:
複数のファイルのファイル名(拡張子)を一括で変更する。UNIX ( Linux FreeBSD )コマンドメモ|プログラムメモ
削除したファイルをgit rmするコマンド
git ls-files --deleted | xargs git rm