2016-08-01 2 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 

을 다음과 같이하고 두 모델이 내 만들고 그 위의 코드에서 볼 수 있듯이 업데이트 작업은 내가

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 콜백을 사용하고 있습니다. 그러나 둘 모두는 사용자를 업데이트 할 때 완벽합니다. 그러나 사용자가 생성되면이 오류 메시지는 전혀 복구되지 않습니다. 이 오류가 발생합니다.

ActiveRecord::NestedAttributes::TooManyRecords in UsersController#create 
Maximum 5 records are allowed. Got 7 records instead. 

사용자가 업데이트하는 동안 제한 및 유효성 검사가 작동하지만 사용자 생성 중에는 작동하지 않는 이유는 무엇입니까? 그리고 행동을 창조하기 위해 그것이 어떻게 작동하게 하는가?

+0

보기에 7 개의 레코드가있는 경우 탐색기 콘솔로 html 코드를 확인 했습니까? –

+0

예! 또한 5 파일을 선택하면 사용자를 저장하지만 5 이상을 선택하면 오류가 발생합니다. 하지만 오류 대신 사용자 생성을 위해 작동하지 않지만 사용자 업데이트를 위해 작동하는 오류를 해결하고 싶습니다. –

+0

begin & rescue 블록 내부에서 사용자 행 User.new (params [: user])에 매개 변수를 추가하는 @ user.save를 수행 하시겠습니까? – 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