2013-09-10 2 views
2

위해 노력하지,하지만 난 레일 (4)이 문제인지 모르겠어요. 다음과 같이레일 4 중첩 된 자원 해시 이것은 레일 4에서 처음으로 응용 프로그램입니다 데이터베이스

나는 자원을 중첩 한 :

resources :made_games do 
    resources :made_game_instances 
end 

나는이 로그에 무슨 일이 일어나고있는 새로운 made_game_instance 저장하려고 :

Started POST "/made_games/11/made_game_instances" for 127.0.0.1 at 2013-09-10 12:03:55  -0700 
Processing by MadeGameInstancesController#create as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"jEN2syjftjRtf3DBnijtp7gNVUEFrI+HYTUs+HFgo5M=", "made_game_instance"=>{"new_word1"=>"bluesky"}, "commit"=>"Create Made game instance", "made_game_id"=>"11"} 
MadeGame Load (122.7ms) SELECT "made_games".* FROM "made_games" WHERE "made_games"."id" = $1 LIMIT 1 [["id", "11"]] 
(14.0ms) BEGIN 
SQL (215.9ms) INSERT INTO "made_game_instances" ("created_at", "made_game_id", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["created_at", Tue, 10 Sep 2013 19:03:55 UTC +00:00], ["made_game_id", 11], ["updated_at", Tue, 10 Sep 2013 19:03:55 UTC +00:00]] 
(5.7ms) COMMIT 
Redirected to http://localhost:3000/made_games/11/made_game_instances/5 
Completed 302 Found in 458ms (ActiveRecord: 358.3ms) 

당신은 PARAMS 해시가 포함되어 있음을 볼 수있다 hash new_game_instance 속성 :new_word1에 값 "bluesky"가 할당됩니다. 내가 알 수없는 것은 새로운 'made_game_instances'객체가 생성 될 때 이후에 생성되는 SQL에이 할당이 나타나지 않는 이유입니다.

추가 정보

이 레일 4이기 때문에, (적어도 개발이 단계에서) 모든 매개 변수를 화이트리스트하기 위해, 내가 허가를 사용하고 있습니다! 컨트롤러의 하단에있는 params private 메서드에서 made_gamesmade_game_instances을 모두 입력합니다.

made_games 컨트롤러 : https://github.com/keb97/madlibs/tree/users_making

새로운 made_game_instance 만드는 데 사용되는 형식은 다음과 같습니다 :

<%= simple_form_for [@made_game, @made_game_instance] do |f| %> 
    <p> 
    <%= f.input :new_word1, label: @made_game.word1.to_s %> 
    </p> 
    <%= f.button :submit %> 
<% end %> 

나는 또한주의해야한다 여기

class MadeGamesController < ApplicationController 

    def new 
    @made_game = MadeGame.new 
    end 

    def create 
    @made_game = MadeGame.new(made_game_params) 
    if @made_game.save 
     flash[:notice] = "Here you go!" 
     redirect_to @made_game 
    else 
     flash[:notice] = "Something about that didn't work, unfortunately." 
     render :action => new 
    end 
    end 

    def show 
    @made_game = MadeGame.find(params[:id]) 
    end 

    private 
    def made_game_params 
     params.require(:made_game).permit! 
    end 
end 

는 github에의 REPO에 대한 링크입니다 make_game에 대한 하나의 형식이 있고 중첩 된 형식이 아닌 made_game_instance에 대한 별도의 형식이 있으므로 믿을 수 없습니다. s는 accepts_nested_attributes_for 또는 fields_for의 문제입니다. 당신의 made_games_instance_controller.rb에서

+1

은'params'는 new_word1'가 아닌'new_word''말한다. – MurifoX

+0

지적 해 주셔서 고맙습니다. 그건 내 게시물의 오타입니다. 테이블의 컬럼이 실제로 'new_word1'이라고 스키마에서 확인했습니다. 이에 따라 영업 이익을 수정하겠습니다. – keb

+0

made_games 컨트롤러를 게시 할 수 있습니까? – Ivan

답변

2

이 줄을 ...

@made_game_instance = @made_game.made_game_instances.build(params[:made_game_instance_params]) 

실제로해야 ...

기호 키를 더 PARAMS 해시 항목이 없습니다
@made_game_instance = @made_game.made_game_instances.build(made_game_instance_params) 

: made_game_instance_params

+0

에있다가, 감사이 정확하게 문제였다! – keb