Какой из следующих потоков эффективен в рельсах? - PullRequest
0 голосов
/ 01 февраля 2012

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

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

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

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

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

Поток ошибок: form_page ----- (отправка формы) ------> post_action ---------- (ошибка) ------------> render form_page (view))

Примечание. В этом потоке конечный пользователь не увидит параметры в 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-параметры?

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

1 Ответ

1 голос
/ 01 февраля 2012

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

...