Rails form_for重定向上的嵌套资源错误

时间:2013-01-16 19:38:42

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

我有Package belongs_to Shop。在我的应用程序中,用户可以为他们的商店创建包。我有'创建包'可以工作,但是如果我试图保存而不输入任何内容,那么重定向似乎有错误。

# package.rb
belongs_to :shop
validates_presence_of :name, :price, :description

# controller
def new
  @shop = current_user.shop
  @package = Package.new
end

def create
  @package = current_user.shop.packages.build(params[:package])
  @package.currency = current_user.shop.currency
  if @package.save
    flash[:success] = 'Package added.'
    redirect_to shop_path(current_user.shop)
  else
    render 'new'
  end
end

# routes.rb
resources :shops, except: [:destroy] do
  resources :packages
end

# new.html.erb
<%= form_for [@shop, @package] do |f| %>

这是错误:

NoMethodError in Packages#create
undefined method `packages_path' for #<#<Class:0x007fab67191580>:0x007fab634ad7b8>

Extracted source (around line #6):
5:
6:   <%= form_for [@shop, @package] do |f| %>

任何帮助?

1 个答案:

答案 0 :(得分:1)

这是因为@shop是零。该路径是多态的,这意味着它将从两个数组值生成路径的方法。如果第一个是nil,它会认为它只是一个包路径。

form_for [@package.shop, @package]会修复它。或者,在路径中,您可以在顶层公开路径以处理创建。

resources :packages, :only => :create

我会选择第一个选项,因此如果出现错误,网址与“新”相同。