【问题标题】:route changes when validations fails验证失败时路由更改
【发布时间】:2012-06-01 05:10:59
【问题描述】:

我有一个工作岗位模型。当我创建新的工作岗位时,我将类别作为这样的参数传递:

new_jobplacement_path(:category => params[:category])

所以网址看起来像这样:

http://localhost:3000/jobplacements/new?category=Corporate

但是当验证失败时,url 会更改为:

http://localhost:3000/jobplacements

为什么会发生这种情况?params 类别在哪里丢失?当验证失败时如何传递此 params 类别?

我的创建操作代码是:

def create
        @jobplacement = Jobplacement.new(params[:jobplacement])
        if @jobplacement.save
        redirect_to(jobplacement_url(@jobplacement.id,:category => @jobplacement.category), :notice => 'Job post was successfully created.') 
    else
        render :action => "new" 
    end
    end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 model-view-controller


    【解决方案1】:

    这是因为您的create 操作路线是

    PUT http://localhost:3000/jobplacements
    

    当验证失败时,页面不会被重定向,所以 url 会保留。

    无论如何,这不会造成问题。

    【讨论】:

    • 不,这会导致问题,因为我需要通过参数存储类别...当验证失败时,因为没有参数值类别存储为空,我不想要..
    • @NJF 所以你需要改变你的创建路线,让它有类别。
    【解决方案2】:

    解决了... 在 form.html.haml 中添加 :url => { :action => :create, :category => params[:category]}:

    = form_for(@jobplacement,:url => { :action => :create, :category => params[:category]},:validate => true, :html => { :class => "form grid_6", :id => "form" }) do |f|
    

    现在,当验证失败时,我的网址更改为:

    http://localhost:3000/jobplacements?category=Corporate
    

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多