0

저는 새로운 레일 및 MVC입니다. 내 데이터베이스에 간단한 양식 및 중첩 된 양식 용 보석을 사용하여 중첩 된 양식을 저장하려고합니다. 양식을 제출하면 '상위'모델 만 생성되어 저장됩니다. 대단히 감사합니다.중첩 된 양식을 저장하지 마십시오.

'상위 모델'

class Diet < ApplicationRecord 
    belongs_to :coach 

    has_many :user_eat_diets 
    has_many :user, through: :user_eat_diets 
    accepts_nested_attributes_for :user_eat_diets 

    has_many :diet_composes 
    has_many :foods, through: :diet_composes 
    accepts_nested_attributes_for :diet_composes 
end 

'아이'모델 :

class DietCompose < ApplicationRecord 
    belongs_to :diet 
    belongs_to :food 
end 

'부모'컨트롤러 :

class DietsController < ApplicationController 
    def new 
     @diet = Diet.new 
     @diet.diet_composes.build 
    end 

    def create 
     @diet = Diet.new(diet_params) 
     if @diet.save 
      flash[:success] = "success" 
     end 
    end 
    def diet_params 
     params.require(:diet).permit(:name, :coach_id, :diet_composes_attributes) 
    end 

end 

'아이'컨트롤러 :

class DietComposesController < ApplicationController 
    def new 
     @diet_compose = Diet_compose.new 
    end 

    def create 
     @diet_compose = Diet_compose.new(diet_compose_params) 
     if @diet_compose.save 
      flash[:success] = "success" 
     end 
    end 

    def diet_compose_params 
     params.require(:diet_compose).permit(:quantity, :hour, :day, :food_id, :diet_id) 
    end 
end 

형태로보기 : 나는 레일 콘솔에서 명령

Diet_compose.all

을 수행 할 때

또한
<%= simple_form_for @diet, :html => {:class => 'form-basic' } do |f| %> 
      <%= f.input :name %> 
      <%= f.input :coach_id %> 
      <%= f.nested_fields_for :diet_composes do |ff| %> 
        <%= ff.remove_nested_fields_link %> 
        <%= ff.input :hour %> 
        <%= ff.input :day %> 
        <%= ff.input :food_id %> 
        <%= ff.input :diet_id %> 
       <% end %> 
      <%= f.add_nested_fields_link :diet_composes %> 
      <%= f.button :submit %> 
     <% end %> 

, 나는 오류 현재 여러 가지를 수정해야

LoadError: Unable to autoload constant Diet_compose, expected /home/tanaka/Desktop/E-xercite/app/models/diet_compose.rb to define it from (irb):8

답변

0

을 얻었다. 주석을 인라인에 추가했습니다. Diet 모델 (diet.rb) 컨트롤러에서

class Diet < ApplicationRecord 
    attr_accessible :diet_composes # make the attributes accessible for mass assignment. 
end 

에서

:

class DietsController < ApplicationController 
    def new 
     @diet = Diet.new 
     @diet.diet_composes.build 
    end 

    def create 
     @diet = Diet.new(diet_params) 
     if @diet.save 
      flash[:success] = "success" 
     end 
    end 
    def diet_params 
     # add attributes of nested association to whitelist 
     params.require(:diet).permit(:name, :coach_id, :diet_composes_attributes => [:hour, :day, :food_id, :diet_id]) 
    end 

end 

당신은 정말 Diet 작업의 당신의 중첩 된 속성을 얻을 수 DietComposesController의 조치가 필요하지 않습니다. 하지만 여전히, DietCompose.all을해야 당신에게 LoadError

class DietComposesController < ApplicationController 
    def new 
     @diet_compose = DietCompose.new # Model name is always CamelCase. DietCompose rather than Diet_compose 
    end 

    def create 
     @diet_compose = DietCompose.new(diet_compose_params) # here as well 
     if @diet_compose.save 
      flash[:success] = "success" 
     end 
    end 

    def diet_compose_params 
     params.require(:diet_compose).permit(:quantity, :hour, :day, :food_id, :diet_id,) 
    end 
end 

당신의 명령을 제공하는 아래의 오류를 수정. 심지어 diet_model.rb의 정의를 살펴보십시오. 이름을 DietModel으로 선언합니다.

보기가 정상적으로 보입니다. 나는 nested_form_fields 보석으로 일하지 않았으므로 100 % 확신 할 수는 없다. 디버깅의 간단한 규칙, 레일 서버의 로그 및 유추를 참조하십시오 :)

+0

감사합니다! 하지만 레일 4.0+에는 존재하지 않는 것처럼 "attr_accessible : diet_composes"모양을 제거해야했습니다. 다이어그램의 diet_id를 자동 설정하려면 어떻게해야합니까? 내가 만든 다이어트 ID와 동일하게 설정할 수 있습니까? – tanaka