Rails - 使用嵌套表单创建新记录

时间:2015-11-23 09:57:23

标签: ruby-on-rails forms

我有一个用户,投资组合和照片的嵌套表单。基本上,用户可以通过以另一种形式上传照片来创建投资组合。但是,我希望通过从他们正在查看的当前投资组合中选择一些照片,让他们有机会创建新的投资组合,并在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,这是用户选择的最多记录,因此我需要访问代表所选照片的​​记录。如何访问用户选择的所有照片?我不能简单地在表单上创建一组有限的复选框控制器,因为显示的数字取决于当前投资组合中的照片数量。

1 个答案:

答案 0 :(得分:1)

使用gem nested_form或cocoon使元素动态化。在后端使用所选项目为新投资组合创建条目。