2013-04-15 4 views
7

こんにちは、私は0アドレスのすべての連絡先を見つけるスコープを作成しています。 Got error message ArgumentError: tried to create Proc object without a blockレール 'cで' Contact.noaddress 'コマンドを実行しているとき。ここスコープですがエラーメッセージArgumentError:ブロックなしでProcオブジェクトを作成しようとしました

私の接触モデルは、スコープ

class Contact < ActiveRecord::Base 
    attr_accessible :email, :firstname, :lastname, :mobilephone, :fullname 
    has_many :addresses 
    validates_presence_of :firstname, :lastname 


    scope :noaddressed, lambda do |addresses| 
    joins(:addresses).where('addresses.created_at.empty?', true) 
    end 
end 

を含めていますし、ここにアドレスモデル

class Address < ActiveRecord::Base 
    attr_accessible :city, :country, :postalcode, :region, :street 
    belongs_to :contact 
end 

は、誰かが私を助けてくださいもらえますか?どうもありがとう。

答えて

15

hereと表示されている(優先順位の問題?)のように聞こえます。

あなたにスコープを変更した場合:また

scope :noaddresses, (lambda do 
    joins(:addresses).where('addresses.created_at is null') 
end) 

または

scope :noaddresses, lambda { joins(:addresses).where('addresses.created_at is null') } 

あなたがブロック引数|addresses|を使用している場合は、私は表示されません。あなたはそれを使用することを忘れましたか?そうでなければ、それとその周囲のパイプを取り除くことができます。

更新日:|addresses|引数を削除し、有効なSQL構文にクエリを更新しました。

+0

ご協力いただきありがとうございます。しかし、 'ArgumentError:引数の数が間違っている(0の場合1)'というエラーが出てしまったのですが、named_scopeを使用しました。 –

+0

アドレス引数はnoaddresses(addresses_arguement)で指定するか削除する必要があります。 – stringsn88keys