Предложите мне, какой из следующих потоков эффективен?
поток 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 %>
- Если вы хотите больше подробностей, я предоставлю их.
- Есть ли другой способ скрыть параметры URL?
Заранее спасибо, Арун.