Как остаться на том же URL, когда проверка не пройдена - PullRequest
4 голосов
/ 03 февраля 2011

Я использую Ruby on Rails 2.3.8, и у меня есть форма регистрации, в которой я получаю параметр следующим образом: /registration/4, который 4 является идентификатором пользователя, который порекомендовал пользователя, который собираетсязарегистрируйтесь на веб-сайте.

Проблема заключается в том, что если проверка не пройдена, когда пользователь отправляет регистрацию (форма отображается на контроллере users, действие create_particular), сайт будет перенаправлен на /users/create_particular,и поэтому я теряю параметр со значением 4, который у меня был раньше.Кроме того, я хочу, чтобы пользователь оставался по тому же URL-адресу, который /registration/4

Как я могу это сделать?

Ответы [ 5 ]

3 голосов
/ 03 февраля 2011

Тогда вам следует переписать ваш метод создания. Вы должны использовать redirect_to :back вместо render :action

UPD

def new
  @word = Word.new(params[:word])
  @word.valid? if params[:word]
end

def create
  @word = Word.new(params[:word])
  if @word.save
    redirect_to @word
  else
    redirect_to new_word_path(:word => params[:word] )
  end
end

выглядит довольно грязно, но это всего лишь царапина

UPD 2

Это действительно не лучшее решение, но оно работает

# routes.rb
match 'words/new' => 'words#create', :via => :post, :as => :create_word

# words_controller
def new
  @word = Word.new
end

def create
  @word = Word.new(params[:word])

  respond_to do |format|
    if @word.save
      format.html { redirect_to(@word, :notice => 'Word was successfully created.') } 
    else
      format.html { render :action => "new" }
    end
  end
end

# views/words/new.html.erb
<%= form_for(@word, :url => create_word_path) do |f| %>
  ...
<% end %>
2 голосов
/ 03 февраля 2011

Отправить на текущий URI (например, action = "").Когда отправка действительна, перенаправьте.POST-> Redirect-> GET - хорошая привычка.

0 голосов
/ 03 февраля 2011

Скрытое поле. Этот идентификатор пользователя param имеет имя, по которому вы извлекаете его в свой контроллер, верно? Так что просто поместите это значение в скрытое поле с тем же именем, и оно выживет в оба конца.

Например:

<%= hidden_field_tag :referring_user_id, params[:referring_user_id] %>
0 голосов
/ 03 февраля 2011

Хорошо, я решил проблему, выполнив следующее:

1) Я создал два маршрута с одним и тем же путем, но с разными методами условий (один пост, а другой настроен на получение)

2) Я изменил форму, чтобы публиковать сообщения для действия POST, определенного выше

3) Я добавил render =>: my_action при сбое проверки

Вот и все.

В любом случае, спасибо за вашу помощь.

0 голосов
/ 03 февраля 2011

Сверху головы:

Отредактируйте свой контроллер (файл registrations_controller.rb).Метод создания по умолчанию содержит следующий фрагмент кода:

if @registration.save
        format.html {  }
        format.xml {  }
      else
        format.html {  }
        format.xml { }
      end

Добавить redirect_to (:back) в скобках к else format.html{}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...