如何解决以下问题:
我想在表 submitted_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(现在持有一个httplink)中添加一个新的submitted_picture,链接到当前游戏(@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
端
我无法让它发挥作用。我遇到了各种各样的错误,所以不要在这里注意到它们,我认为最好是要求最好的解决方案。
简而言之,我想要将submitted_picture添加到游戏的最新一轮(最近的created_at)。
答案 0 :(得分:1)
我认为在游戏形式中嵌套所有内容会让事情变得不必要。如果我理解正确,你想创建一个新的submitted_picture,它需要选择一个游戏。该轮不是直接选择,但只是游戏的最新版本。 (这听起来像是一个可疑的假设 - 但它确实让事情更简单,所以我会用它滚动)
所以只需创建一个新的submitted_picture表单,然后添加一个游戏选择。
在你的处理程序中,从游戏中拉出最新一轮并将该轮融合到你的参数中以保存新图片。
这样做你想要的吗?