【问题标题】:Form submission with errors displays form + errors at a different URL from the original form带有错误的表单提交在与原始表单不同的 URL 处显示表单 + 错误
【发布时间】:2009-08-30 06:51:00
【问题描述】:

我正在开发一个相对简单的网站,(目前)只有一个资源。我在GET /maps/new 有一个表单,它将新地图的数据提交到POST /maps,完成后重定向到GET /maps/:id。这里的问题是,如果验证失败,它会呈现新地图表单,所以 URL 仍然是/maps。但是重定向到/maps/new 会丢失验证错误(以及他们之前输入的地图数据)。

这是我第一个真正的基于 Rails 的网站,所以我确信这可能是我缺少的一些基本内容。这是我的newcreate 操作,它们与生成的脚手架几乎没有变化:

def new
  @map = Map.new

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @map }
  end
end

def create
  @map = Map.new(params[:map])

  respond_to do |format|
    if @map.save
      flash[:notice] = 'Map was successfully created.'
      format.html { redirect_to(@map) }
      format.xml  { render :xml => @map, :status => :created, :location => @map }
    else
      format.html { render :action => 'new' }
      format.xml  { render :xml => @map.errors, :status => :unprocessable_entity }
    end
  end
end

如何让表单的 URL 保留在 /maps/new 上,同时维护中间表单数据和错误?

【问题讨论】:

    标签: ruby-on-rails url-routing


    【解决方案1】:

    这对你有用吗?

    def new
      @map = flash[:map] || Map.new
    

    ...

     else
       flash[:map] = @map
       format.html { redirect_to new_map_url }
    

    【讨论】:

    • 确实如此!非常感谢!
    • 从头开始,当我尝试保存这样的真实 Map 对象时它不起作用:我收到 cookie 溢出错误。在正常情况下,cookie 溢出会很好,但是……搜索仍在继续。
    • 问题是该对象的大小超过 2k。您可以切换到 p_store 或活动记录来存储您的会话。
    • 它现在可以工作了,我所要做的就是取消注释 session_store.rb 初始化程序中的一行,运行 rake db:sessions:create 和 db:migrate,并削减会话密钥以便它实际上适合会话表。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 2022-11-06
    • 1970-01-01
    相关资源
    最近更新 更多