Какой из следующих потоков эффективен в рельсах?

Предложите мне, какой из следующих потоков эффективен?

поток 1: Happy Flow: form_page -----(отправить форму)------> post_action ----------(успех)------------> redirect_to_success_page

Поток ошибок: form_page -----(отправить форму)------> post_action ----------(сбой)------------> перенаправить с параметрами to form_page Примечание. В этом потоке конечный пользователь увидит параметры в URL-адресе, кроме пароля (но для меня это выглядит некрасиво).

Поэтому я изменил поток со страницы перенаправления на страницу рендеринга. Я создал динамический класс в модели, который будет действовать как объект активной записи (это не подкласс активной записи). После модификации я смогу видеть значения полей в форме, но не в параметрах URL. Таким образом, поток будет выглядеть следующим образом

Happy Flow: form_page -----(отправить форму)------> post_action ----------(успех)------------> redirect_to_success_page

Поток ошибок: form_page -----(отправить форму)------> post_action ----------(сбой)------------> render form_page ( Посмотреть))

Примечание. В этом потоке конечный пользователь не увидит параметры в URL-адресе. Но он увидит другой URL-адрес вместо URL-адреса form_url, то есть мы увидим «post_action» в URL-адресе, потому что мы просто отображаем представление form_page в действии post_action. Прямо сейчас, когда вы обновляете страницу, я сбрасываю значения в объекте (но это можно изменить, если мы хотим, чтобы объект всегда был жив)

Помимо этих деталей, если вам нужен код, я вставлю его сюда.

controller.rb
-------------
def form_page
@something = SomeName.new({:one=>'', :two => ''})
end
def post_action
@something = SomeName.new(params[:some_variable])
if success
 redirect_to success_url
else
 render :action => form_page
end
end

model.rb
--------
class SomeName
  def initialize(hash)
    hash.each do |k,v|
      self.instance_variable_set("@#{k}", v)
      self.class.send(:define_method, k, proc{self.instance_variable_get("@#{k}")})
      self.class.send(:define_method, "#{k}=", proc{|v| self.instance_variable_set("@#{k}", v)})
    end
  end
end


view:
-----

<% form_for :something, :url => {:action => 'post_action'} do |f| %>
<%= f.text_field :one %>
<%= f.text_field :two %>
<% end %>
  1. Если вы хотите больше подробностей, я предоставлю их.
  2. Есть ли другой способ скрыть параметры URL?

Заранее спасибо, Арун.


person Jak    schedule 01.02.2012    source источник


Ответы (1)


Классическая практика в Rails заключается в том, чтобы один и тот же URL-адрес отображал форму и проверял форму (с методом GET в первом случае, POST или PUT во втором случае). Используйте его со вторым потоком вашего вопроса: после ошибки url пользователя не изменился после ошибки, и параметры не в URL.

person Baldrick    schedule 01.02.2012
comment
Эй, Болдрик, я не имею дело с активным объектом записи. Я последовал тому, что вы предложили. Но снова я получаю ту же проблему, параметры видны в URL-адресе. - person Jak; 02.02.2012
comment
controller.rb: какое-то действие по определению; если запрос.пост?; некоторые вещидругие вещи заканчиваются - person Jak; 02.02.2012
comment
Я собираюсь использовать сеанс для хранения информации о форме. Насколько это хорошо и насколько безопасно? Это предпочтительная функциональность? - person Jak; 02.02.2012