2016-08-01 6 views
0

私のアプリでは、ユーザ登録時にいくつかのファイルをアップロードできます。アップロードを最大5ファイルに制限する必要があります。だから私は、コードActiveRecord :: NestedAttributes :: TooManyRecordsエラー

class User < ActiveRecord::Base 
has_many :fileuploads, :dependent => :destroy 

accepts_nested_attributes_for :fileuploads, limit: 5, :allow_destroy => true 

    validate do |user| 
    if user.fileuploads && user.fileuploads.count > 5 
     errors[:base] << "You can add maximum 5 files." 
    end 
    end 
end 

class Fileupload < ActiveRecord::Base 
    belongs_to :user 
end 

を、次の2つのモデルがあり、その上のコードから見ることができるように、私の作成と更新アクションで私は

respond_to do |format| 
    begin 
    if @user.save 
     format.html { redirect_to @user, notice: I18n.t('views.flash_messages.user_was_successfully_created') } 
    else 
     format.html { render action: "new" } 
    end 
    rescue ActiveRecord::NestedAttributes::TooManyRecords 
    flash[:error] = 'You can add maximum 5 files. ' 
    end 
end 

を追加し、I limit: 5validateコールバックを使用しています。しかし、私は両方のユーザーが更新するときに最適です。しかし、ユーザーが作成されると、このエラーメッセージはまったくレスキューされません。このエラーが発生します

なぜ、ユーザーの更新中に制限と検証が機能しますが、ユーザー作成時には機能しません。どのようにしてアクションを作成するには?

+0

フォームに7個のレコードがある場合は、ナビゲータコンソールでhtmlコードを確認しましたか? –

+0

はい!私は5つのファイルを選択した場合、それはユーザーを保存しますが、5つ以上を選択するとエラーが発生します。しかし、エラーの代わりに私はユーザー作成のために働いていないエラーを救いたいが、ユーザーの更新のために働く。 –

+0

begin&rescueブロック内で@ user.saveを実行します。ここで、ユーザラインUser.new(params [:user])にパラメータを追加しますか? – power

答えて

0

これは今私のために働いています。より良いソリューションは大歓迎です。

class User < ActiveRecord::Base 
has_many :fileuploads, :dependent => :destroy 

accepts_nested_attributes_for :fileuploads, limit: 5, :allow_destroy => true 

after_create :count_files 

def count_files 
    if self.fileuploads && self.fileuploads.count > 5 
     errors[:base] << "You can add maximum 5 files." 
     raise ActiveRecord::Rollback 
    end 
end 
関連する問題