Ruby/Rails

factory_girlでdeviseのメール通知をスキップする

Factory.define :user do |u| u.name 'naoty' u.email 'naoty.k@gmail.com' u.password 'naotynaoty' # skip confirmation u.confirmed_at Time.now end deviseには確認メールの送信をスキップするskip_confirmation!というメソッドがあるが、それをファクト…

rspec, factory_girl, spork, guardによる自動テスト環境の構築

こちらの記事を参考に自分で自動テスト環境を構築した記録です。この記事はすごく参考になりました。感謝です。 Rails3+RSpec2+Spork+Guard(guard-rspec,guard-cucumber)で最速のBDD(振舞駆動開発)環境を作る - Curiocity Drives me 0.環境 # Gemfile sour…

Rails3のDate.currentのソースコードリーディング

# config/application.rb module Hoge class Application < Rails::Application # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names…

脱初心者なRubyのループ処理の書き方

合計を計算する場合 # 初心者 count = 0 (1..10).each {|n| count += n} p count # 脱初心者 p (1..10).inject(0) {|count, n| count + n} 配列に特定の要素をいれる # 初心者 users = [] [1,2,3,4,5].each do |n| users << User.find(n) if n > 3 end # 脱…

class_evalとinstance_eval

以下のようなクラスとインスタンスについて考えていく。 Person = Class.new # Personクラスの作成(Classクラスのインスタンスの作成) naoty = Person.new # Personクラスのインスタンスの作成 今回はclass_evalとinstance_evalについて。どっちとも引数の…

特異クラスと特異メソッド

以下の3つのコードはすべて同じことをしている。 naoty = Person.new('naoty') # naotyはPersonクラスのインスタンス def naoty.greet # naotyというインスタンスに特異メソッドを定義 p 'Hello, my world!' end class Person # PersonはClassクラスのインス…

Moduleによるクラスの拡張

Module CoolModule # このModuleをインクルードしたクラスを引数にブロック内を実行 def self.included(class) # 第1引数のメソッドを第2引数以降を引数に実行 class.send :alias_method_chain, :hoge_method, :cool end # インクルードしたクラス内で定義(…

Dateクラスのタイムゾーンの不思議

$ date 2011年 7月20日 水曜日 00時46分27秒 JSTDate.current #=> Tue, 19 Jul 2011 Date.today #=> Wed, 20 Jul 2011 Date.currentはUTC、Date.todayはJSTを返すのだろうか?

MongoidのFxxkなdelete_allの実装に気をつけろ!

ruby-1.9.2-p180 :001 > User.delete_all(:name => "naoty") #=> 200 # 全消去…だと…!?まじ、Fucx! ruby-1.9.2-p180 :002 > User.delete_all(conditions: { name: "naoty" }) #=> 1 # 条件に合うドキュメントのみ削除 ruby-1.9.2-p180 :003 > User.where(…

MongoDBを使う際のRspecの設定メモ

MongoDBのORMとしてMongoidを使う場合。 # /Gemfile source 'http://rubygems.org' gem 'rails', '3.0.9' gem 'rake', '0.8.7' gem 'mongoid' gem 'bson_ext' gem 'rspec-rails' gem 'factory_girl_rails' 以下のようなエラーがおきた。 $ rake spec Mon Jul…

Rails3にrspecとfactory girlをインストールしたときのメモ

# /Gemfile gem 'rspec-rails' gem 'factory_girl_rails' $ bundle install --path vendor/bundle$ rails g rspec:install Mon Jul 18 21:51:37 [initandlisten] connection accepted from 127.0.0.1:50773 #1 Mon Jul 18 21:51:37 [conn1] end connection 1…

Classクラスに関する仮説

Object.class #=> Class Module.class #=> Class Class.class #=> Class Class.superclass #=> Module irbで上記のような結果を得たので、これよりClassクラスってこんな感じじゃないかと思った。あくまで仮説だけどねー。 class Class < Module Object = se…

ある条件であるクラスを追加するヘルパーメソッドつくりました

# application_helper.rb def tag_add_class_if(tag, conditions, cl, attributes = {}, &block) if conditions if attributes.keys.include?(:class) attributes[:class] += " #{cl}" else attributes.merge(:class => cl) end end content_tag tag, attrib…

ある条件でhiddenなHTMLタグを出力するヘルパーメソッドつくりました

# application_helper.rb def tag_hidden_if(tag, conditions, attributes = {}, &block) attributes = attributes.merge({'style' => 'display:none;'}) if conditions content_tag tag, attributes, &block end # index.html.erb <% @articles.each_with_i…

paramsでfindするときの簡単な書き方

# めんどい(´・ω・`) @user = User.find(params[:user_id]) if params[:user_id].present? # ① # カンタン(`・ω・´) @user = User.find_by_id(params[:user_id].presence) # ② find(id)とfind_by_id(id)の違いは、レコードが見つからなかったときに前者がRecordN…

アプリ(Titanium Mobile)とサーバー(Rails)間の通信

# /app/controllers/users_controller.rb class UsersController < ApplicationController def signin @user = User.create({:name => params[:name], :password => params[:password]}) respond_to do |format| format.json { render :json => @user.to_jso…

Rails 3のバッチ処理

$ rails runner [ファイル名] で実行します。ファイルは/script以下に配置します。今回は、一日の(投稿数、新規ユーザーなどの)カウントをリセットするバッチ処理を書いてみました。/script/reset_count.rb # encoding: utf-8 SomethingCool.all.each {|sc…

ルーティングヘルパーにパラメーターを付加する

link_to "メール送信", mail_user_path(:article_id => @article) ハードコーディングはなるべく回避するため、ルーティングヘルパーの使い方をマスターしたい。こっちの方がカッコイイし。

Rails3のルーティングの初歩

resources :users これで、基本的なアクション(index, show, new, create, edit, update, delete)のマッピングができる。 resources :users do get 'mail', :on => :member end 他にアクションを加えたい場合、ブロック内に「HTTP verb」「アクション名」…

Rails3でMongoidを使ってみる

0. 環境 Windows Vista Ruby 1.8.7 Rails 3.0.7 MongoDB 1.8.1 bundler 1.0.13 1. 新規アプリケーションの作成 rails new sample -O 「-O」(大文字のオー、これで2回やりなおした(´・ω・`))をつけると、config/database.ymlが生成されません。今回はmongo…

CSV出力の機能テスト

環境 Ruby 1.9.1 Rails 2.3.12 テストコードというものを昨日しった拙者 例として、任意の年のアクセス数をcsv形式で出力するexportというアクションを機能テストしたい。そこで、選択可能な過去5年間についてリクエストをだして出力をテストする。 require …

Ruby InstallerでWindowsにRubyを入れるとirbでエラーが起こる件

環境変数HOMEを削除したら解決した。削除したことによる不都合は今のところないみたい。

ボタンによって処理を切り替える

submit_tagの場合 view <% form_tag -%> <%= submit_tag("Search", :name => "search") %> <%= submit_tag("Delete", :name => "delete") %> <% end -%> controller if params[:search] // ... elsif params[:delete] // ... end image_submit_tagの場合 vie…

select_datetimeからの日付検索

日付を入力するフォームを簡単に作成できるselect_date/select_datetimeというヘルパーを使って日付検索を実装しました。まだ不完全なところがありそうですが。一応、記録しておきます。 期間で検索するには、select_datetimeを2回使います。なので、パラメ…

選択されたチェックを画面遷移後も維持する

チェックボックスやラジオボタンで選択したものを画面遷移後もチェックしたままにしておきたい、ってことあるじゃないですか。けっこうそういうシーンは多いので、メモ。 <% @something_cool.each do |something| -%> <%= radio_button_tag "cool", "#{somet…

MechanizeでMixiボイスに投稿する

RubyとMechanizeを使ってMixiボイスに投稿するプログラムを書きました。Mixiボイスに投稿するのはこれが初めてでしたw このプログラムを実行するにはmechanizeをインストールする必要があります。 $ gem install mechanize で、プログラムはこんな感じ。 re…

プラグイン読み込みの設定

includeだけではプラグインを読み込めないことが発覚した。 module hogehoge # ... end class FugafugaController < ApplicationController include hogehoge #=> "uninitialized constant ..."というエラー end environment.rbに以下のように記述することが…

わかりやすかったテキスト(Rails, jQuery編)

初心者の拙者にとっては、理論的な話より、ハウトゥが具体的に書かれているものの方が役に立ちました。その結果、以下のような逆引きリファレンス的なテキストを重宝してます。(一方で、オライリーの本がホコリをカブってる…)Ruby on Rails 逆引きクイック…

form_tagでパラメータをつけて現在のページに遷移する

第一引数を省略すると、現在のページに遷移する。 form_tag({}, {:method => :get}) do

Instant Railsのrubyコンソールでgitを使う

0.環境 Windows XP Instant Rails 2.0(C:\InstantRails-2.0-win) 1.msysgitをインストール インストールのときに「Adjusting your PATH environment」で2番目の「Run Git from the Windows Command Prompt」を選択。ここでは標準どおり「C:\Program Files…