Рельсы восстанавливаются из неверной формы? - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть приложение Rails 2.3.

В настоящее время в моей модели есть следующие проверки:

validates_presence_of :jobno, :companyname

У меня есть следующий контроллер:

# POST /kases
# POST /kases.xml
  def create
    @company = Company.find(params[:kase][:company_id])
    @kase = @company.kases.create!(params[:kase])

    respond_to do |format|
        UserMailer.deliver_makeakase("EMAILADDRESS", "Highrise", @kase) if params[:sendtohighrise]
        UserMailer.deliver_makeakaseteam("EMAILADDRESS", "Highrise", @kase) if params[:notify_team_of_creation]
        @kase.delay.create_freeagent_project(current_user) if params[:send_to_freeagent]

        #flash[:notice] = 'Case was successfully created.'
        flash[:notice] = fading_flash_message("Case was successfully created.", 5)
    end  
        format.html { redirect_to(@kase) }
        format.xml  { render :xml => @kase, :status => :created, :location => @kase }
  end

Поэтому, когда вы пытаетесь создать новую запись, которая не содержит ни названия вакансии, ни названия компании, я правильно получаю следующее сообщение об ошибке:

ActiveRecord::RecordInvalid in KasesController#create
Validation failed: {{errors}}

Я читал о способности восстановления, но я не уверен, как / где ее использовать. Я прочитал несколько документов, касающихся возможности спасения содержания формы. Я пытаюсь сделать так, чтобы форма оставалась на месте - с введенным содержимым, - но в форме отображается ошибка.

Один из документов, которые я прочитал, находится здесь http://apidock.com/rails/ActiveRecord/RecordInvalid

Я не хочу регистрировать ошибку, просто сообщите пользователю, в чем проблема, чтобы он мог повторить попытку.

Возможно ли это?

Спасибо

Danny

1 Ответ

2 голосов
/ 21 февраля 2011
def create
  @company = Company.find(params[:kase][:company_id])
  @kase = @company.kases.new(params[:kase])

  if @kase.save
    UserMailer.deliver_makeakase("EMAILADDRESS", "Highrise", @kase) if params[:sendtohighrise]
    UserMailer.deliver_makeakaseteam("EMAILADDRESS", "Highrise", @kase) if params[:notify_team_of_creation]
    @kase.delay.create_freeagent_project(current_user) if params[:send_to_freeagent]
    redirect_to @kase
  else  
    render :new
  end
end
...