2011-12-30 1 views
0

У меня есть 3 представления, которые пользователи видят в заказе, сначала они выбирают местоположение, затем выбирают категорию, затем они отправляются в форму. Первое представление отправляет информацию о местоположении в представление выбора категории. Из категории select view я использую строку запроса для отправки идентификатора категории в форму. В новом действии Controller # я помещаю строку запроса в переменную экземпляра: @award = Award.find (params [: award])rails 3, Как установить и передать строку запроса через Controller # создать действие, которое не сохраняет

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

Как я могу сохранить строку запроса в результате неудачного действия create?

def create 
    @recommendation = Recommendation.new(params[:recommendation]) 
    @recommendation.user_id = current_user.id 


    respond_to do |format| 
     if @recommendation.save 
     format.html { redirect_to location_path, notice: 'Recommendation was successfully created.' } 
     format.json { render json: @recommendation, status: :created, location: @recommendation } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @recommendation.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

EDIT _

Я полагал, что я мог бы поделиться нового действия:

def new 
    @recommendation = Recommendation.new 
    @award = Award.find(params[:award]) 
    @recommendation.approvals.build 
    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @recommendation } 
    end 
    end 
+2

вы всегда можете «сохраняться» данные в скрытом поле на форме – maprihoda

+0

I представление содержит скрытое поле, но скрытое поле заполняется экземпляра Название переменной, которая возвращает nill после сбоя. –

+0

@TJ Sherrill Я предполагаю, что у вас есть объект рекомендации, заполняющий форму и скрытое поле в этой форме, соответствующей рекомендации. Category (и вы установили ее значение, когда вы первоначально визуализировали форму). Если вы отправляете эту форму и терпите неудачу, вы хотите, чтобы действие вашего контроллера повторно отображало эту форму с данными объекта рекомендации; в котором вы сохранили это значение категории. Этого не происходит? Если у вас нет категории как атрибута объекта рекомендации, обязательно добавьте ее через attr_accessor или столбцом db через миграцию. – miked

ответ

0

хорошо, так как QueryString уже передается от нового действия к созданию действия, если действие create завершится неудачно, оно попадет в строку 'format.html {render action: "new"}'.

вы могли бы сделать что-то вроде этого:

format.html {redirect_to thing_path(@thing, :foo => params[:foo])} 
+0

Я должен был бы предоставить redirect_to new_recommendation_path (: award => @award), который возвращает, что он не может найти награду ... –