Rails form_for ошибка вложенного ресурса при перенаправлении

У меня есть Packagebelongs_toShop, В моем приложении пользователь может создать пакет для своего магазина. У меня работает 'create package', но кажется, что при перенаправлении возникает ошибка, если я пытаюсь сохранить без ввода чего-либо.

# 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 ответ

Решение

Это будет потому, что @shop равен нулю. Путь является полиморфным, то есть он будет генерировать метод для пути из двух значений массива. Если первым будет ноль, он будет думать, что это просто путь к пакету.

form_for [@package.shop, @package] это исправлю. Или, в маршрутах, вы можете выставить маршрут на верхнем уровне для обработки create.

resources :packages, :only => :create

Я бы выбрал первый вариант, чтобы URL выглядел примерно так же, как "новый", если есть ошибка.

Другие вопросы по тегам