0

has_many-belogs_to 관계로 작성된 메소드에 액세스하려고하면 정의되지 않은 메소드 오류가 발생합니다.has_many 및 belongs_to 관계로 생성시 정의되지 않은 메소드

local.rb (모델) :

class Local < ActiveRecord::Base 
    has_many :foods, dependent: :destroy, :foreign_key => 'local_id' 
end 

food.rb :

class Food < ActiveRecord::Base 
    attr_accessible :descrizione, :nome, :prezzo, :voto 
    belongs_to :local, :foreign_key => 'local_id' 
end 

/locals/show.html.erb보기는 호출 여기에 코드 (semplified)입니다 foodsController에 대한 조치를 만듭니다

... 

<%= form_for :food, :url => {:controller => :foods, :action => :create} do |f| %> 
... 
<% end %> 

foods_controller.rb

class FoodsController < ApplicationController 
    def create 
     @food = @local.foods.build(params[:food]) 
    end 
end 

여기 food_controller에서 문제가 제기되었습니다. "undefined method 'foods' '. 왜? 관계는 local.foods 메소드를 가능하게해야합니까? (@local은 locals_controller.rb, @local = Local.find (params [: id])에 정의되어 있으며 local_id 특성은 schema.rb에 정의되어 있으며 마지막 db 마이그레이션에는 명확하게 정의되어 있습니다)

고맙습니다.

+1

자세한 내용을 제공해 주시겠습니까? @local이 nil이라고 말하는 것입니까? – davidrac

+0

@local이 nil이 아니므로 필요한 다른 세부 정보를 말해주십시오 – bugman

+0

@local은 다른 컨트롤러에 정의되어 있으므로 FoodController에서 액세스 할 수 없습니까? – elevine

답변

0

@local은 다른 컨트롤러에 정의되어 있으므로 FoodController에서 액세스 할 수 없습니다.

+0

어떻게 해결할 수 있습니까? 이? – bugman

+0

locals_helper에 current_local이라는 메서드를 작성하면 현재 로컬을 다시 검색 할 수 있습니까? – bugman

+0

도우미 방법을 원하지 않는다고 생각합니다. 음식물을 데이터베이스에 저장하고 싶습니까? 그렇다면 할 수 있어야합니다 : Food.new (params [: food]) save – elevine

1

체크 아웃 accepts_nested_attributes_forhere을 확인하십시오. 나는 이것이 당신이하려는 일을하는 표준 방법이라고 생각합니다.

+0

시도해 보겠습니다 – bugman

+1

하지만 모델 간의 관계 자체가 메서드를 만듭니다? – bugman

+0

나는 local.rb에 음식을 넣고 @food = local.foods.build (params [food])에서 food_controller의 활동을 변경하려고 시도했지만 'local'이 정의되어 있지 않습니다. – bugman