建议我以下哪项流程有效?
流程1: 快乐流程: form_page -----(表单提交)------> post_action ----------(成功)------------> redirect_to_success_page错误流程: form_page -----(表单提交)------> post_action ----------(失败)------------>使用params重定向到form_page 注意: 在此流程中,用户将在URL中看到除密码之外的参数 (但对我来说看起来很难看。)
所以我将流程从重定向页面更改为渲染页面。我建立 模型中的动态类,它将像活动记录对象一样(它是 不是活动记录的子类)。 修改后,我将能够在表单中看到字段值 但不是在url params。所以流程将如下所示
快乐流程: form_page -----(表单提交)------> post_action ----------(成功)------------> redirect_to_success_page
错误流程: form_page -----(表单提交)------> post_action ----------(失败)------------>渲染form_page(查看))
注意: 在此流程中,最终用户将不会在URL中看到参数。但是他 会看到一个不同的url而不是form_url url,即我们会看到 url中的'post_action'因为我们只是渲染了 post_action动作中的form_page视图。现在当你刷新 页面我重置了对象中的值(但如果我们这可以改变 希望obj一直活着)
除了这个细节,如果你想要代码,我会在这里粘贴。
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 %>
先谢谢, 阿伦。
答案 0 :(得分:1)
Rails中的一个经典做法是让相同的url显示表单并验证表单(在第一种情况下使用GET方法,在第二种情况下使用POST或PUT)。与问题的第二个流程一起使用:发生错误后,错误后用户的网址没有更改,参数不在网址中。