Ruby on Rails 3.0.20 より前の 3.0 系Ruby on Rails 2.3.16 より前の 2.3 系
Active Support Concern A typical module looks like this: module M def self.included(base) base.extend ClassMethods base.class_eval do scope :disabled, -> { where(disabled: true) } end end module ClassMethods ... end end By using ActiveSupport::Concern the above module could instead be written as: require "active_support/concern" module M extend ActiveSupport::Concern included do scope :disabled, -
2013年12月2日更新: 参照されることが多いので Rails 4 の情報を訳注として追記しました。また、Rails 4 に関する情報は、 WEB+DB PRESS Vol.73 が非常に参考になるので、一読をおすすめします。 この文章は Mitch Crowe 氏のブログより 2012年4月14日の記事を翻訳したものです。 The 10 Most Underused ActiveRecord::Relation Methods http://blog.mitchcrowe.com/blog/2012/04/14/10-most-underused-activerecord-relation-methods/ 昨日は ActiveRecord::Relation のコードに膝まで浸かって、使われているのをこれまで全然見たことがない面白いナゲットを思い出させてくれた。この記事で、十分に活用
Ruby on RailsのメジャーバージョンアップとなるRails4のリリースが近づいて来ました。先日、日本人(あるいはアジア人)として初めてRailsコアチームのコミッタとして迎え入れられた松田明氏によると、Railsの生みの親であるDavid Heinemeier Hansson氏(以下、通称のDHHを使います)は、プロジェクトをリードするという意味で活動が活発になっているそうです。 そして最近のDHHは、ブログもよく書いています。彼は歯に衣着せぬ発言でも知られています。強い主張を持った(opinionated)なフレームワークの作者らしく、DHH自身もきわめてハッキリと物を言います。攻撃的とまでは言いませんが、IT業界や技術動向などでは割と何かをクソミソにけなしたりということをします。 DHHが何かをけなすときは、だいたい何らかの鋭い洞察とパンチの効いた皮肉が含まれていて、Twit
it, specify, exampleそれぞれの先頭にxをつけるだけで、Pendingになる。 describe Foo do xit { 1.should eq 1 } xspecify { 1.should eq 1 } xexample { 1.should eq 1 } end Pending: Foo # Temporarily disabled with xit # ./spec/models/foo_spec.rb:4 Foo # Temporarily disabled with xexample # ./spec/models/foo_spec.rb:6 Foo # Temporarily disabled with xspecify # ./spec/models/foo_spec.rb:5 Register as a new user and use Qiita m
Ruby on Rails 3.2.11がリリースされました。 3.2.10が出てから数日ですが、合わせてかなり重大なセキュリティFIXが含まれているので、確実に更新しましょう。 3.2.11での変更点 (1) URLを知っている人だけがアクセスできる隠しページや、パスワードリセット機能などで、token認証をすることがよくあります。 たとえば以下のようなコードです。 if params[:token] @user = User.find_by_token(params[:token]) end ここで、仮にparams[:token]が空のハッシュ {} の場合、if文は当然真と評価されて通過しますが、find_by_tokenの部分は条件無しと見なされます。 User.find_by_token({}) User.where(:token => {}) このようなコードは、whereが
Written by Magnus Holm At RubyConf 2010 Shugo Maeda talked about Refinements: A proposal for a new feature in Ruby which allows you to easily override methods without affecting other parts of your program: module TimeExtensions refine Fixnum do def minutes; self * 60; end end end class MyApp using TimeExtensions def initialize p 2.minutes end end MyApp.new # => 120 p 2.minutes # => NoMethodError L
$ bundle exec ruby some_test.rb Run options: # Running tests: ... Finished tests in 1.017405s, 2.9487 tests/s, 1.9658 assertions/s. 普通はこれでも十分なんですが、セグメンテーションフォールトとかの低レベルなバグを追っているときだとちょっとつらい。 そういうときは-vオプションを使ってやればいい。 $ bundle exec ruby some_test.rb -v Run options: -v # Running tests: SomeTest#test_a = 0.00 s = . SomeTest#test_b = 1.01 s = . SomeTest#test_c = 0.01 s = . Finished tests in 1.017389s, 2
自分のプロジェクトで使う gem はこれですので、すべからくインストールすべし!ということを指定できるようになりました。 まあ、gem 依存については私も大層な知識がないのでorz、頼みの rails-2.1.0/CHANGELOG ファイルを見ながらこの記事を書いてみようかなと思います。 config/environment.rb Rails::Initializer.run do |config| # bj という名前の gem パッケージが必要 config.gem "bj" # hpricot という名前で、バージョンが0.6でリポジトリが http://code.whytheluckystiff.net の gem パッケージが必要 config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluc
リストに必要な要素が過不足なく含まれていることをチェックするとき,いちいちリストをソートしなくても=~を使えばよい # test [:zero, :one, :three].should =~ [:one, :two] # log Failure/Error: [:zero, :one, :three].should =~ [:one, :two] expected collection contained: [:one, :two] actual collection contained: [:one, :three, :zero] the missing elements were: [:two] the extra elements were: [:three, :zero] Register as a new user and use Qiita more conveniently
Active Recordで以下のようにcountを実行しても、複数列の値が取得できません。 Message.count(:group => "rcv_user_id, send_user_id") =>[[ 3, 2] , [ 4, 2]] ※一番最後に指定した列の値+行数 このような場合には、countを使わず、通常のfindを使用します。 Message.find(:all , :select => "count(*) count, rcv_user_id, send_user_id":group => "rcv_user_id, send_user_id") 結果をオブジェクト(インスタンス)から取得するときにも、countやメソッド名で取得できるので、ソースの可読性が良くなります。 もう、count使わないほうが良いカナと思ってしまいます。
Perlだと、特に宣言なしに、 $a{'size'}{'upperbody'}{'chest'} = 100; とか出来るのに Ruby だといちいち Hash.new() など宣言しなくてはならず不便です! しかし以下のおまじないを唱えると、ハッシュのハッシュのハッシュとかを一気に宣言できちゃって便利ったらありゃしません。 my_hash = Hash.new{|h,k| h[k]=Hash.new(&h.default_proc)} my_hash[:size][:upperbody][:chest] = 100 my_hash[:size][:egg] = 'XL' my_hash => {:size=>{:upperbody=>{:chest=>100}, :egg=>"XL"}} というのが使い方で、とっても便利ですね、いろんな場面で使えそうです! 以下は、なんでーそうなるの?と
レキシカルスコープに慣れている人(私も含めて)にとってはアレルギーと言われてしまいそうだけど、Rubyでは以下の記述が可能です。 hoge = 0 while hoge < 3 fuga = hoge hoge += 1 end p fuga # これはできちゃう しかし重要なことは、ブロックの場合は少し違ってくるということ。ブロック内で生成された変数にはブロックの外からはアクセスできません。 [1, 2, 3].each do | element | hoge = element + 1 end p hoge # これはできない 私としてはforやwhileよりもブロックを使うことが多いのでさほど気にならない。スコープが広く取られるてしまうことをプログラマが注意しなければならないのであれば、もしかしてRuby2.0で変更されるのかもね。
Ruby on Rails 7.1.3.2 Module ActionView::Helpers::FormHelper actiontext/app/helpers/action_text/tag_helper.rb actionview/lib/action_view/helpers/form_helper.rb Action View Form Helpers Form helpers are designed to make working with resources much easier compared to using vanilla HTML. Typically, a form designed to create or update a resource reflects the identity of the resource in several ways: (
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く