2013-01-16 3 views
0

Packagebelongs_toShop이 있습니다. 내 응용 프로그램에서 사용자는 자신의 상점에 대한 패키지를 만들 수 있습니다. 나는 작동하도록 '패키지 만들기'를 가지고 있지만 아무것도 입력하지 않고 저장하려고하면 리디렉션에 오류가있는 것으로 보입니다.리디렉션시 중첩 된 리소스 오류가 발생했습니다.

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| %> 

어떤 도움 : 여기

# 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| %> 

오류인가?

답변

1

이것은 @shop이 nil이기 때문입니다. 패스는 다형성입니다. 즉, 2 개의 배열 치로부터 패스의 메소드를 생성합니다. 첫 번째가 nil이면 패키지 경로라고 생각합니다.

form_for [@package.shop, @package]으로 수정됩니다. 또는 경로에서 톱 레벨의 경로를 노출하여 생성을 처리 할 수 ​​있습니다.

resources :packages, :only => :create 

오류가있는 경우 URL이 'new'와 거의 같아 지도록 첫 번째 선택 항목과 함께 가고 싶습니다.

+0

다른 옵션 중 하나는 오류 발생시 생성 작업에서 @shop 인스턴스 변수를 설정하는 것입니다. – Swards

+0

''오류 발생시 생성 액션에서 @shop 인스턴스 변수를 설정하십시오. ' –