0

如何解决以下问题:

我想在表submit_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 %>

希望添加一个带有 flickr_id 的新 submit_picture(它现在拥有一个 httplink),链接到当前游戏(@game)。

我一直在尝试几件事来更新它,但它似乎没有让步:(我现在看到的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

结尾

我无法让它工作。我遇到了各种各样的错误,所以我认为最好寻求最佳解决方案,而不是在这里全部记录下来。

所以简而言之,我想在游戏的最新一轮(最近创建的_at)中添加一个提交的图片。

4

1 回答 1

1

我认为将所有内容嵌套在游戏形式中会使事情变得不必要地复杂。如果我理解正确,您想创建一个新的 submit_picture 并且需要选择一个游戏。该回合不是直接选择的,而是游戏的最新回合。(这听起来像是一个可疑的假设——但它确实让事情变得更简单,所以我会继续使用它)

所以只需制作一个新的提交图片表单,并添加一个游戏选择。

在您的处理程序中,从游戏中提取最新一轮并将该轮合并到您的参数中以保存新图片。

这样做是你想要的吗?

于 2012-11-15T19:50:26.910 回答