カテゴリー : Ruby on Rails

[Ruby on Rails] view で現在のコントロール名、アクション名を取得する方法

Ruby on Rails で、view で現在のコントロール名、アクション名を取得する方法をメモ。

controller.controller_name
controller.action_name

[参考]:Railsのviewで現在のコントロール名、アクション名を参照する方法 #Rails – Qiita はてなブックマーク - Railsのviewで現在のコントロール名、アクション名を参照する方法 #Rails - Qiita

[Ruby on Rails] validates numericality で nil はチェックしない方法

Ruby on Rails で、validates numericality で nil の場合、チェックしないようにするには allow_nil: true を指定すればOKです。

class Article < ActiveRecord::Base
  validates :page_view, numericality: true, allow_nil: true
end

allow_nil: true を指定しない場合は、未入力でも「xxx は数字で入力してください。」というバリデーションエラーになってしまいます。

・[参考]:validation – custom error message for valid numericality of in rails – Stack Overflow はてなブックマーク - validation - custom error message for valid numericality of in rails - Stack Overflow

[Ruby on Rails] .build や build_xxx について

Ruby on Rails の .build や build_xxx についてメモ。

build メソッドはググれば見つかるけど、「build_xxx って何だ?」と思って調べてみました。

build_xxx は has_one でアソシエーションが定義されている場合に使える構文らしく、

tag = @article.tag.build

と書くのを、

tag = @article.build_tag

という風に書くこともできるみたいです。

ちなみに build は、親モデルに対する外部参照キーを自動でセットしてくれる点が new メソッドと違って便利!

詳しくはこの辺を読む。

build (ActiveRecord::Relation) – APIdock はてなブックマーク - build (ActiveRecord::Relation) - APIdock

Ruby on Rails 備忘録 – Ride On Rails » Blog Archive » ActiveRecord の new と build の違い はてなブックマーク - Ruby on Rails 備忘録 – Ride On Rails » Blog Archive » ActiveRecord の new と build の違い

[Ruby on Rails] 複雑な検索フォームを簡単に作成することができる「Ransack」

Ruby on Rails で、複雑な検索フォームを簡単に作成することができる「Ransack」というGemが便利なのでメモ。

ernie/ransack · GitHub はてなブックマーク - ernie/ransack · GitHub

Home · ernie/ransack Wiki はてなブックマーク - Home · ernie/ransack Wiki

#370 Ransack – RailsCasts はてなブックマーク - #370 Ransack - RailsCasts

Ransackのススメ #Rails #ransack #Ruby – Qiita はてなブックマーク - Ransackのススメ #Rails #ransack #Ruby - Qiita

[Ruby on Rails] 単一カラムの配列を作るなら pluck メソッドが便利

Ruby on Rails 3.2 から追加された新機能 pluck メソッドが便利です。

pluck (ActiveRecord::Calculations) – APIdock はてなブックマーク - pluck (ActiveRecord::Calculations) - APIdock

こんな風に map で単一カラムの配列を作っていたのを、

blog_titles = Blog.all.map(&:title)

pluck メソッドを使えば、こんな感じに書ける。

blog_titles = Blog.pluck(:title)

しかも、パフォーマンスが良いということで、pluck を使わないわけにはいかない。

Rails3.2から導入されたpluckメソッドのパフォーマンスが素晴らしい件 – (゚∀゚)o彡 sasata299’s blog はてなブックマーク - Rails3.2から導入されたpluckメソッドのパフォーマンスが素晴らしい件 - (゚∀゚)o彡 sasata299's blog

_人人人人人人人人人_
> pluck ステキ! <
 ̄Y^Y^Y^Y^Y^Y^Y^Y ̄

#318 Upgrading to Rails 3.2 – RailsCasts はてなブックマーク - #318 Upgrading to Rails 3.2 - RailsCasts

[Ruby on Rails] seed_fu を環境毎に分ける

Ruby on Rails で seed_fu のファイルを開発環境毎に分けてみました。

% ls -l db 
total 64
drwxr-xr-x  11 shigeoka  staff    374  1 29 20:10 fixtures/
drwxr-xr-x   3 shigeoka  staff    102 12 27 18:16 fixtures_development/
drwxr-xr-x   3 shigeoka  staff    102  1 30 18:07 fixtures_production/
drwxr-xr-x   3 shigeoka  staff    102  1 30 18:06 fixtures_staging/
drwxr-xr-x  76 shigeoka  staff   2584  1 29 20:10 migrate/
-rw-r--r--   1 shigeoka  staff  18269  1 29 20:10 schema.rb
-rw-r--r--   1 shigeoka  staff    343 12  4 23:32 seeds.rb

どの環境でも共通のデータは、普通に fixtures ディレクトリ以下に設置しています。

その他は、development, staging などでインポートしたいデータが微妙に違ってくるので、suffix に環境名を付けたディレクトリを作って分けました。

それぞれの環境のseedデータをインポートするには下記のように FIXTURE_PATH を指定してあげます。

% rake db:seed_fu FIXTURE_PATH=db/fixtures_development

そんでもって、development, stagingで共通のファイルは require で読み込むようにしています。

# db/fixtures_development/users.rb
require "#{Rails.root}/db/fixtures_staging/groups.rb"

こんな感じです。

[Ruby on Rails] CSVインポート/エクスポート

Ruby on Rails で、CSVのインポート/エクスポート機能を実装する上での参考情報をご紹介します。

Ruby 1.9 は FasterCSV が標準の CSV クラスとして採用されているので、require “csv” すればすぐに使える。

FasterCSV Documentation

Class: CSV (Ruby 1.9.3)

CSVインポート/エクスポート実装サンプル

RailsCast

Ruby on Rails Screencasts – RailsCasts

CSVインポート

#396 Importing CSV and Excel – RailsCasts

roo というスプレッドシート(Open Office, Excel, Google Spreadsheetsなど)を操作する gem を使っている。

Empact/roo · GitHub

roo:スプレッドシートを操るRubyライブラリ « TORQUES LABS

CSVエクスポート

#362 Exporting CSV and Excel – RailsCasts

Ruby1.9とRailsでCSV出力(SJIS) #Rails #Ruby – Qiita

[rails] csvつくって出力するのよメモ | おれせか


CSVの文字コード変換

CSVファイルはExcelから作成されることが多くて、文字コードをShift_JISからUTF-8へ変換して扱う必要があります。

その辺のノウハウがまとめられています。

CSV を文字コード変換しつつロード #Ruby – Qiita

rails c で CSV ファイルをアップロードする

普通はテストで使う fixture_file_upload メソッドで CSV ファイルをアップロードしてから、モデルに追加したクラスメソッド import を呼び出してやります。

> include ActionDispatch::TestProcess
> file = fixture_file_upload "tmp/test.csv", "text/comma-separated-values"
 => #<Rack::Test::UploadedFile:0x007fa36b03f960 @content_type="text/comma-separated-values", @original_filename="test.csv", @tempfile=#<File:/var/folders/46/bg9j7wkn5qg9n895016mlvk00000gn/T/test.csv20130124-12060-h3mn08>> 
> Product.import(file)
   (0.2ms)  BEGIN
["a", "b", "c", "d"]
["1", "2", "3", "4"]
   (0.1ms)  COMMIT
 => <#CSV io_type:File io_path:"/var/folders/46/bg9j7wkn5qg9n895016mlvk00000gn/T/test.csv20130124-12060-h3mn08" encoding:UTF-8 lineno:2 col_sep:"," row_sep:"\r" quote_char:"\"">

参考情報

[Ruby on Rails] before_filter に条件を設定する

Ruby on Rails で before_filter に条件を設定するための参考サイトをメモ。

Rails3 事始め: [Rails3] before_filter に条件を設定する はてなブックマーク - Rails3 事始め: [Rails3] before_filter に条件を設定する

rails before_filterとかに条件 | このコードわからん はてなブックマーク - rails before_filterとかに条件 | このコードわからん

[Ruby on Rails] with_options を使ってバリデーションをグルーピング

Ruby on Rails で、ある条件の時だけバリデーションを掛けたいときは with_options を使えばグルーピングできて素敵です。

Ruby on Rails Guides: Active Record Validations and Callbacks はてなブックマーク - Ruby on Rails Guides: Active Record Validations and Callbacks

paramがなければModelのValidationをskipすれば良いじゃない #Ruby #Rails – Qiita はてなブックマーク - paramがなければModelのValidationをskipすれば良いじゃない #Ruby #Rails - Qiita

5.4 Grouping conditional validations
Sometimes it is useful to have multiple validations use one condition, it can be easily achieved using with_options.

class User < ActiveRecord::Base
  with_options :if => :is_admin? do |admin|
    admin.validates :password, :length => { :minimum => 10 }
    admin.validates :email, :presence => true
  end
end

All validations inside of with_options block will have automatically passed the condition :if => :is_admin?

[Ruby on Rails] form_for、form helper まとめ

Ruby on Rails の form_for や form helper で調べることが多い項目を自分用にまとめ。

■ f.select

id の指定の仕方でハマったときに読む。

そろそろRailsのselectメソッドについて一言いっとくか – (゚∀゚)o彡 sasata299’s blog はてなブックマーク - そろそろRailsのselectメソッドについて一言いっとくか - (゚∀゚)o彡 sasata299's blog

formのselectタグにidを設定する – 中国でRuby on Rails はてなブックマーク - formのselectタグにidを設定する - 中国でRuby on Rails

select(object, method, choices, options = {}, html_options = {})

色々と随時更新していく予定です。