0

次の問題を解決するにはどうすればよいですか。

次のようにリンクされているテーブルsubmited_picturesに新しい行を追加したいと思います。

game.rb
    has_many :rounds
    has_many :participants, :dependent => :destroy
    has_many :submitted_pictures, :through => :rounds
    has_many :users, :through => :participants
    accepts_nested_attributes_for :participants
    accepts_nested_attributes_for :rounds, :reject_if => :all_blank

round.rb
    belongs_to :game
    has_many :submitted_pictures, :dependent => :destroy
    accepts_nested_attributes_for :submitted_pictures

submitted_picture.rb
    has_one :round
    has_one :game, :through => :rounds
    belongs_to :user

だから私は呼び出すことができます:

<% @user.games.rounds.last.submitted_pictures.each do |blabla| %><% end>

私は以下を使用して複雑なフォームを作成しました:

<%= form_for(@game) do |f| %>
    <%= f.fields_for :round do |ff| %>
        <%= ff.fields_for :submitted_pictures do |fff| %>
            <%= fff.label :flickr_id %>
            <%= fff.text_field :flickr_id %>
        <% end %>
    <% end %>
    <%= f.submit "Submit Picture", class: "btn btn-primary" %>
<% end %>

現在のゲーム(@game)にリンクされたflickr_id(今のところhttplinkを保持している)で新しいsubmited_pictureを追加したいと考えています。

私はそれを更新するためにいくつかのことを試みてきましたが、それは動揺していないようです:( update_attributesは完全に間違っています私は今見ています:p)

def update
    @game = Game.find(params[:id])
    if @game.rounds.last.submitted_pictures.update_attributes(params[:id])
        flash[:success] = "Pic Submitted!"
    else
        render :action => 'new'
    end
end

また

def update
    @game = Game.find(params[:id])
    if @game.save
        flash[:success] = "Pic Submitted!"
        redirect_to games_path
    else
        render :action => 'new'
    end

終わり

動作させることができません。私はあらゆる種類のエラーを受け取っているので、ここでそれらすべてに注意するのではなく、最善の解決策を求めるのが最善だと思いました。

つまり、submited_pictureをゲームの最新ラウンド(最新のcreated_at)に追加したいと思います。

4

1 に答える 1

1

ゲーム形式ですべてをネストすると、物事が不必要に複雑になると思います。私が正しく理解している場合は、新しいsubmited_pictureを作成する必要があり、ゲームを選択する必要があります。ラウンドは直接選択されませんが、ゲームの最新のものです。(これは疑わしい仮定のように聞こえますが、物事を単純に保つので、私はそれを使用します)

したがって、新しいsubmited_pictureフォームを作成し、ゲーム選択を追加するだけです。

ハンドラーで、ゲームから最新のラウンドをプルし、そのラウンドをパラメーターにマージして、新しい画像を保存します。

それはあなたが望むことをしますか?

于 2012-11-15T19:50:26.910 に答える