昔の Ruby On Rails のブログ

注意! RoR2 とかの話です。今は更新していません。昔、はてなダイアリーで書いていたブログを移行しました。

2010-01-01から1年間の記事一覧

コールバックの戻り値

以下の発見がありました。(Rails 2.3.5) 例えば before_destroy などのコールバックで条件により削除させない方法があること ActiveRecord#destroy の戻り値で判定できる事 以下、ソースサンプルモデル def before_destroy if hoge? errors.add(:fuga, "hell…

v2.3.5 に event_calendar のインストール

試してみようと思い、入れたら generate でエラー /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- rails/generators/migration (MissingSourceFile)どうやら最新は 2.3 で、それから Rails…

delayed_job を入替えた

現状のものが使いにくかったので入替えました。以下のサイトが大変参考になりました。 http://namakesugi.blog42.fc2.com/blog-entry-65.html情報は上記のサイトに書いてあるので、私はそこに書いてなかった情報を載せますね。インストールしたのは以下のバ…

モデルからヘルパーを使う

PDF出力に prawnto ではなく prawn を使っています。 モデル内で number_with_delimiter を使いたくなって調べました。 class Bill < ActiveRecord::Base include ActionView::Helpers::NumberHelper def hoge number_with_delimiter 1234 end end まっ、本…

部分テンプレートとコレクションの連携

よく以下のようなサンプルを見かけます。◆ ブログの show(ブログとそれにぶら下がる複数のコメントを表示) <%= render @blog.comments %> ◆ comments/_comment.html.erb <div class="comment"> <p> <strong>Comment last updated: <%= comment.updated_at %></strong> <%= link_to "Edit", edit_articl</p></div>…

restful-authentication + aasm でのバグ!?

「recently_activatedメソッドがありまへんでー」とエラーが出てしまう人の為に。app/models/user_observer.rb が生成されます。 def after_save(user) UserMailer.deliver_activation(user) if user.recently_activated end 実行すると以下のエラーメッセー…

rails の template ファイルに以下の記述をした

initializer 'datetime_formats.rb', <<-CODE #Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") } # 他は省略ね CODE テンプレートを適用すると以下のエラー undefined local variable or method `time' …

続・RailsによるアジャイルWebアプリケーション開発 第3版のサンプルを実際に動かす

P406 の「ネストされたリソース」って初心者から脱却すべき課題の1つだと思う。熟読すべし。ActiveRecord の 1:n の関係は理解できた人もそれをどうルーティングや表示と連携すれば良いのか?以下に要約。 1つの記事(article)に複数のコメント(comment)がぶ…

check_box で複数選択の時、ON⇒OFFの情報が来ない

以下のソースを書いてみた。突っ込み歓迎します。以下は index ビュー <% @choice_users.each do |choice_user| %> <tr> <%= content_tag :td, check_box_tag("choice_user[#{choice_user.id}][my_check]", true, choice_user.my_check?) %> <%= content_tag :td</tr>…

Redmine0.8.4 ⇒ 1.0.1 にアップグレード

バックアップとかは書いていない。必要最低限の情報のみ書きます。 あんまり使いこなしていないのでうまく行ったのかも(email.yml とかそのままでOKだった) アップグレード作業 cp ../redmine-0.8.4/config/database.yml config/ cp ../redmine-0.8.4/conf…

Rails.vim の partial 機能

備忘録的に...どっちかって言うと vim の備忘録になるのですが、 「行選択モード」を使う機会が少ないのか、よく忘れます。 Shift+V で切り出したい範囲を選択(vim の行選択モード) 右記の様に入力する ⇒ :Rpartial hoge 後は切り出した側と切り出された側を…

半角チェックをリファクタしてみた

必要に迫られたので、自分で書く事をせずに Google先生に頼ってしまいます。以下のページがヒットしました。 http://doruby.kbmj.com/talkOneself/20100308/_Ruby_勝手にリファクタリングさせてもらいました。 def self.hankaku?(str) return nil if str.nil…

delayed_job を使ってみる

非同期処理をやってくれる Delayed_job。 大量メール送信があるので、http://d.hatena.ne.jp/mat_aki/20100113/1263378918 を参考に実際に動かしてみる。rake がらみはどんなのがあるのかな $ rake -T | grep jobs rake jobs:clear # Clear the delayed_job …

日付をよく扱います

備忘録的に... 5.day.since.to_date # => 5日後 5.days.ago.to_date # => 5日前 # 月のループ (0..11).inject([]){|r, i| r << @date.beginning_of_year.months_since(i)

特定アクションのみ layout を変更(他のアクションはデフォルトを使う)

特定アクションの layout 変更はほとんど以下の形式で説明されています。 class HogesController < ApplicationController layout "no_menu", :only => :fuga ... 上記のやり方だと、デフォルトで使っていた layout(application.html.erb)が他のアクションで…

ActiveRecord でデフォルト値

こんな感じになったけど、いいのかな… def initialize(attributes = nil) attributes ||= Hash.new attributes[:hoge] ||= 'fuga' super end

git svn clone には --localtime オプション必須!?

git svn clone した後に git log すると Date がGMT(+0000)ってなってた。 マニュアルを調べて、 --locatime オプションを追加して clone し直すと期待する日本時間になった。 よかった*2

RailsによるアジャイルWebアプリケーション開発 第3版のサンプルを実際に動かす

実際に動かしながらいじったほうが良いと思います。 オーム社のサイトからサンプルソースをDL(多分 zip ファイルが日本語対応) たくさんフォルダがあって分かりにくい $ mkdir log $ rake db:migrate $ rake db:fixtures:load http://localhost:3000/store h…

User has_many Salary で Salary のレコードのユニーク性

職員とその給料なのですが、以下の仕様をどう実現して良いか今日分かった。 給料日は月毎。なので年月フィールドで識別。Salary#payday = "201004" としています user.salaries で同じ年月のレコードは含めたくない User has_many Salary な関係です。 has_m…

Consoleの出力がウザい時

最後に「;nil」って付ける。nil って出ちゃうけど一杯になるよりマシ。 >> users = User.find :all; nil => nil

CSV出力のまとめ

対象はWindowsとみなし、SJISで。 モデルでCSVを作って、コントローラで文字コード変換。 コントローラ。format を使うんですね。 def index @projects = Project.all respond_to do |format| format.html # index.html.erb format.xml { render :xml => Pro…

Dynamic attribute-based finders

出来るかな?と思ってやってみたら出来た! ユーザの指定日のブログを得る。無ければ生成する。 blog = @user.blogs.find_or_initialize_by_work_date(date) find_or_create_by_... もあるよ。

プルダウンで絞り込んでいく Ajax

都道府県プルダウンを選択すると、その隣にある市区町村プルダウンが動的に変化する ・・・みたいな。(^^; ビュー <%= collection_select :prefecture, :id, Prefecture.all, :id, :title %> <%= observe_field(:prefecture_id, { :update => :city_id, :on …

heroku でアプリケーション名の変更

heroku のアカウントは作成済みとする。 git もインストール済み。 gem install heroku rails rails-app cd rails-app git init git add . git commit -m 'first commit' heroku create この時点で勝手にアプリ名が付与される。("rails-app" ではない) creat…

to_xls プラグインで Excelに出力

確かに簡単です。ただ、Excel2000 ではNGだった(確認済み)のが惜しい。

「Railsレシピブック 183の技」の Recipe101 の疑問が解けた

<% @shop = shop %>上記の存在理由が分からなかったけど、やっと理解できた。 例えば @shops[0].name => nil @shope[1].name => "hoge"の場合、2番目のテキストフィールドにはデフォルトとして、"hoge"が入ってるのね...

ActiveRecord を使わないけど ActiveForm は使いたい

config/environment.rb config.frameworks -= [ :active_record ]上記でARを使わないようになる。けど、ActiveFormは使っている。 以下のエラーが出た orz $ ruby script/server => Booting WEBrick... /usr/lib/ruby/gems/1.8/gems/activesupport-2.1.2/lib…

role_requirement の generate で生成される fixture ファイルにバグ!?

./script/generate roles Role Userを実行すると色々と生成されますよね。 test/fixtures/users.yml に admin が追加されますが、 roles: adminが追加されるが正しくは roles: admin_roleじゃね?あと、Role モデルに has_and_belongs_to_many :usersが無い…

testメソッドが分からない

http://www.atmarkit.co.jp/fcoding/articles/3rdrail/03/3rdrail03c.html を読んで test メソッドの事を知りました。そこで実験してみた。 require 'test_helper' class ItemTest < ActiveSupport::TestCase def test_hoge assert true end test "fuga" do …

IDの初期値について

fixtureファイルには ID を書く必要無いって言うけど、書きたいときもあるじゃん。 あと、一番最初の本番運用時に、テストデータを削除して、 テーブルが空っぽの状態なら、「 ALTER TABLE `items` AUTO_INCREMENT =1 」で対応できる。