рельсы 3, Как установить и передать строку запроса через Controller # создать действие, которое не сохраняет - PullRequest
0 голосов
/ 30 декабря 2011

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

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

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

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

РЕДАКТИРОВАТЬ _

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

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

1 Ответ

0 голосов
/ 30 декабря 2011

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

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

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