2

これは 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_gamesmade_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 の問題ではないと思います。

4

1 に答える 1