2011-07-28 19 views
2

私は簡単な安らかなレールAPIをjsonレスポンスを供給するように設定しました。モデルには、次に示すバリデーションがあるline.rbがあります。ラックテスト中にアクティブモデル送信の検証エラーが2回発生しました。

あなたは私は私はしかし、それは検証エラーを引き起こしたし、私の主張を満たしている必要がある行にタイトルを供給していないのですので、見ることができるように、私はスイート

it "with invalid attributes" do 
post"#{url}/#{account.name}.json", :api_key => application.key, :line => {:department => "Survey"} 
--some assertions -- 
body = JSON.parse(last_response.body) 
body.should eql({"error"=>{"message"=>"[\"Title can't be blank\", \"Title is too short (minimum is 3 characters)\",]"}}) 
end 

を以下している私のスペックで

validates :title, :presence => true, :length => {:minimum => 3, :maximum => 40}, 
:appropriate_title => {:message => "cannot have . and /"} 
validates :department, :presence => true 
validates :owner, :presence => true 
validates :account, :presence => true 
validate :unique_inputs 
validates :title, :uniqueness => { 
    :scope => :account, 
    :message => 'is already taken for this account', 
    :case_sensitive => false } 

同じ検証エラーが2回発生します。

{"error"=>{ 
    "message"=>"[\"Title can't be blank\", \"Title is too short (minimum is 3 characters)\", \"Title can't be blank\", \"Title is too short (minimum is 3 characters)\"]" 
    }} 

これは実際には開発モードで私はこの検証エラーを2回取得していない奇妙です。あなたは私が私のコントローラで何か間違ったことをやっている疑う場合は、次のように私は私のコントローラ

@line = @current_user.lines.new(params[:line]) 
if @line.save 
    respond_with(@line) 
else 
    render :json => {:error => {:message => @line.errors.full_messages}} 
end 

に持っているもので、それはラックテストとバグですか、私は何か間違ったことをやっている場合、私は把握することはできません。

+0

私はdevモード(私は実際にはprodモードを試していない - まだ)以外は、同じ問題が発生しています。 'validates:date、:presence => true、:uniqueness => {scope =>:artist_id}' 'validates:artist_id、:presence => true' 私のモデルには日付と日付しかありません。説明、アーティストとの関係(belongs_to)。一意性検証はうまく動作しますが、存在確認によって日付フィールドに空白の値を渡すと二重の検証エラーが発生します。 この問題を解決しましたか?私はレール3.0.4でbtwです。 – Spiralis

答えて

1

は、あなたがしようとしたがいる:

validates :department, :presence => true 
validates :owner, :presence => true 
validates :account, :presence => true 
validate :unique_inputs 
validates :title, :presence => true, 
        :length => {:minimum => 3, :maximum => 40}, 
        :appropriate_title => {:message => "cannot have . and /"}, 
        :uniqueness => { 
        :scope => :account, 
        :message => 'is already taken for this account', 
        :case_sensitive => false } 
+0

はい、私はそれを試みましたが、手元の問題を解決しませんでした。 wierdの問題は、私がスコープを作成していないときに問題が現れないということですが、スコープを設定しているときに二重の妥当性検査エラーが発生します。@line = @ current_user.lines.new(params [:line]) ' – Xecutioner

0

あなたは二重の検証につながる可能性があり、いくつかの関連を持っていますか?

validate => falseなどを追加できます。この問題が発生したが、時には団体が同じオブジェクトに二回の検証を実行しているにつながる理由

has_one :account, :validate => false 

は、私は全くわかりません。

l = User.last.lines.new(); l.valid?; l.errors 
# might return in double errors 
l = Line.new(); l.valid?; l.errors 
# errors probably just once 
関連する問題