위해 노력하지,하지만 난 레일 (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_games
및 made_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에서
은'params'는 new_word1'가 아닌'new_word''말한다. – MurifoX
지적 해 주셔서 고맙습니다. 그건 내 게시물의 오타입니다. 테이블의 컬럼이 실제로 'new_word1'이라고 스키마에서 확인했습니다. 이에 따라 영업 이익을 수정하겠습니다. – keb
made_games 컨트롤러를 게시 할 수 있습니까? – Ivan