簡體   English   中英

Rails3驗證失敗並丟失子字段

[英]Rails3 fails validation and loses child fields

我有一個表格,提示要附加作業和job_files。 當作業保存由於驗證而失敗時,重新顯示該表單時,所選的job_files將消失。 如何保留子字段? 所有父字段都保留在表單中,但子字段不見了。

工作模式:

class Job < ActiveRecord::Base
  has_many :job_files, :dependent => :destroy
  accepts_nested_attributes_for :job_files, :allow_destroy => true
  validates_acceptance_of :disclaimer, :allow_nil => false, :accept => true, :on => :create, :message=>'Must accept Terms of Service'

結束

job_files模型:

class JobFile < ActiveRecord::Base
  belongs_to :job
  has_attached_file :file
end

jobs_controller:

  def new
    @upload_type = UploadType.find_by_id(params[:upload_job_id])
    @job = Job.new
    @job.startdate = Time.now
    10.times {@job.job_files.build}
    @global_settings = GlobalSettings.all
  end

  def create
    @global_settings = GlobalSettings.all
    if params[:cancel_button]
      redirect_to root_path
    else
      @job = Job.new(params[:job])
      @job.user_id = current_user.id
      @upload_type = UploadType.find_by_id(@job.upload_type_id)
      if @job.save
        JobMailer.job_uploaded_notification(@upload_type,@job).deliver
        flash[:notice] = "Job Created"
        redirect_to root_path
      else
        # retain selected files if save fails
        (10 - @job.job_files.size).times { @job.job_files.build }
        flash[:error] = "Job Creation Failed"
        render :action => :new
      end
    end    
  end

job_files部分在工作表中:

<%= form.fields_for :job_files, :html=>{ :multipart => true } do |f| %>
   <li class="files_to_upload">
      <%= f.file_field :file %>
   </li>
<% end %>

任何幫助將不勝感激,因為我無法在線找到任何解決方案。

這是標准問題的行為。 確實,解決此問題的唯一方法是先保留文件,而不管驗證是否通過。 然后,運行您的驗證。 但這絕對是一種解決方法。

您也可以先進行客戶端驗證,然后再進行服務器端驗證。 這樣,您可以更好地保證用戶的數據在提交到服務器之前是有效的,這樣他們就不會遇到任何服務器端驗證失敗,並且文件將始終有效。 如果我穿上你的鞋子,我可能會走那條路。 請注意,客戶端驗證不能替代服務器端驗證,在這種情況下只會為您的用戶提供幫助。

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM