これは Rails 4 での初めてのアプリですが、Rails 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 ハッシュには、new_game_instance
属性:new_word1
に値「bluesky」が割り当てられているハッシュが含まれていることがわかります。私が理解できないのは、新しい「made_game_instances」オブジェクトが作成されたときにその後生成される SQL にこの割り当てが表示されない理由です。
追加情報
これは Rails 4 であるため、(少なくとも開発のこの段階では) すべてのパラメーターをホワイトリストに登録するために、permit を使用しました! と の両方のコントローラーの下部にある params プライベート メソッドmade_games
でmade_game_instances
。
made_games
コントローラー:
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 リポジトリへのリンクは次のとおりです: 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 %>
また、ネストされたフォームではなく、made_game には 1 つのフォームがあり、made_game_instance には別のフォームがあることに注意してください。したがって、これは accept_nested_attributes_for または fields_for の問題ではないと思います。