我有一个用户,投资组合和照片的嵌套表单。基本上,用户可以通过以另一种形式上传照片来创建投资组合。但是,我希望通过从他们正在查看的当前投资组合中选择一些照片,让他们有机会创建新的投资组合,并在resubmit
中使用方法PortfolioController
为他们创建新的投资组合。模型是:
class User < ActiveRecord::Base
has_many: portfolios
end
class Portfolio < ActiveRecord::Base
has_many: photos
belongs_to: user
end
class Photo < ActiveRecord::Base
belongs_to: portfolio
attr_accessor :move
end
控制器是:
class PortfolioController < ApplicationController
//... some generic code
def resubmit
// This is where I need help
end
def display
@userPortfolio = Portfolio.where(:id => params[:uid]).first
end
end
,视图是:
<%= simple_form_for @userPortfolio, :url => {:action => resubmit} do |f|%>
<%= f.label current_user.name %>
<% @images = @userPortfolio.photos %>
<% @images.each do |anImage| %>
<%= f.fields_for :anImage do |ff| %>
<%= ff.checkbox :move, :id => "move_#{anImage.id}" %><%=ff.label :move, "Move image #{anImage.name} to new portfolio?" %>
<% end %>
<% end %>
<%= f.submit "Create new portfolio" %>
<% end %>
基本上,一旦用户点击提交,我希望方法resubmit
创建一个新的投资组合,其中包含与所选照片相同的新照片集合。也就是说,我想根据用户选择的照片属性创建1条portfolio
新记录和几条新记录photo
,这是用户选择的最多记录,因此我需要访问代表所选照片的记录。如何访问用户选择的所有照片?我不能简单地在表单上创建一组有限的复选框控制器,因为显示的数字取决于当前投资组合中的照片数量。
答案 0 :(得分:1)
使用gem nested_form或cocoon使元素动态化。在后端使用所选项目为新投资组合创建条目。