Rails添加从一个控制器到另一个控制器的路径

时间:2017-02-04 19:00:58

标签: ruby-on-rails ruby ruby-on-rails-3

在结账控制器上,如果用户没有填写他们的地址,他应该被重定向到地址路径,但是在重定向rails输出之后:

  

#的未定义方法`new_user_address_path'

结帐代码:

def checkout
  @order = current_user.cart.orders.find(params[:id])
  if current_user.address.blank?
    redirect_to new_user_address_path(current_user)
    flash[:error] = 'Antes de prosseguir por favor, preencha o seu endereço'
  end
end

我添加了一个辅助方法,但它没有用。为什么控制器会将路径警告为方法?

路线

用户地址

 user_address    POST     /users/:user_id/address(.:format)                                   address#create
 new_user_addres GET      /users/:user_id/address/new(.:format)                               address#new

结帐

  orders GET      /orders(.:format)                orders#index
  order  PUT      /orders/:id(.:format)            orders#update
         DELETE   /orders/:id(.:format)            orders#destroy

1 个答案:

答案 0 :(得分:0)

问题出在这里

resources :users, only: [:new, :create, :edit, :update, :show] do
  resources :address, only: [:new, :create]
end

默认情况下,带有resources的{​​{1}}方法将第一个参数视为复数,因此它会尝试删除额外的s以生成成员网址,因此{{1路径。

为了解决这个问题,我建议重命名

s

new_user_addres

并在您的变形中添加不规则复数

resources :users, only: [:new, :create, :edit, :update, :show] do
  resources :address, only: [:new, :create]
end

请注意,您必须重新启动服务器