Rails 怎么设置一个页面编辑完成后跳转的地址?

gsky · 2015年03月10日 · 最后由 shallmentmo 回复于 2015年03月10日 · 3248 次阅读

正常的情况下,例如编辑一个用户时,链接是 http://localhost:3000/users/2/edit , 编辑完成后自动跳转到 http://localhost:3000/users/2 .

但是我新建的一个页面,编辑页面链接是http://localhost:3000/factors/10/edit , 编辑完成后自动跳转到了http://localhost:3000/factor.10,然后报错提示:

ActionController::RoutingError (No route matches [PATCH] "/factor.10"):

像这种情况,是在哪里设置编辑完成后跳转的正确地址http://localhost:3000/factor/10呢?

controller 里对应的方法代码是:

def update  
  @factor= Factor.find(params[:id])
  @result= Result.find_by(factor_id: @factor.id)
  if @factor.update_attributes(factor_params)
     calculate_result(@factor,@result)
        flash[:success] = "更新成功"
        redirect_to @result
     else
        render 'edit'
  end
end

贴一下表单代码

#1 楼 @Rei edit.html.erb代码是:

<% provide(:button,"确认修改") %>
  <h1>TPI因子修改</h1>
  <div class="row">
  <div class="col-md-6 col-md-offset-3">
      <%= render 'layouts/factor' %>
  </div>
</div>

_factor.html.erb的代码是:

<%= form_for(@factor) do |f| %>
          <%= f.label :项目名%>
          <%= f.text_field :name, class: 'form-control' %>
          <%= f.label :项目计划总人时%>
          <%= f.text_field :a, class: 'form-control' %>
          :
          :
          <%= f.text_field :eee , class: 'form-control' %>
          <%= f.label :执行通过的冒烟测试案例总数%>
          <%= f.text_field :fff, class: 'form-control' %>
          <%= f.submit yield(:button), class: "btn btn-primary" %>
<% end %>

rake routes | grep factor 看看,还有路由代码。

#3 楼 @Rei rake routes | grep factor结果是:

路由代码有点乱:

get 'results/new'

get 'results/index'

get 'results/show'

root 'static_pages#home'

get 'signup' => 'users#new'

get 'help' =>  'static_pages#help'

get 'about' => 'static_pages#about'

get 'contact' => 'static_pages#contact'

get 'login' => 'sessions#new'

get 'factor' => 'factors#new'

# get 'factor_edit' => 'factors#edit'

get 'results' => 'results#index'



post 'login' => 'sessions#create'

delete 'logout' => 'sessions#destroy'

resources :users
resources :tpis
resources :factors
resources :results

resources :account_activations, only: [:edit]

因为报错的地方是 PATCH 方法,我估计 form 表单的 url 不正确,但我不确定是什么原因引起的,试试去掉 route 里面这行:

get 'factor' => 'factors#new'

#5 楼 @Rei 我把这行改成了:

get 'inputfactor' => 'factors#new' 

果然解决了😄 ,估计是之前名字有冲突

redirect_to @result@result是什么来的? @gsky

#6 楼 @gsky 奥,我想明白了。

get 'factor' => 'factors#new'

这条路由生成了 factor_path 这个命名路由,跟 resources :factor 的单数形式路由冲突了。

#7 楼 @shallmentmo result 是另一个 model,根据 factor 的内容计算出来的。

#8 楼 @Rei 原来是这样子 :plus1:

redirect_to @result

这个不是应该重定向到 @result 有关的路径吗?怎么跟 factor 关系上了

#11 楼 @shallmentmo form url 错掉了,根本就没执行到 这个 update action,自然就没有 redirect_to

@libuchao ,好吧,我明白了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号