代码之家  ›  专栏  ›  技术社区  ›  Aun

Rails 2.3中带有集合的嵌套模型表单

  •  0
  • Aun  · 技术社区  · 17 年前

    如何在Rails 2.3中实现这一点?

    class Magazine < ActiveRecord::Base
      has_many :magazinepages
    end
    
    class Magazinepage < ActiveRecord::Base
      belongs_to :magazine
    end
    

    然后在控制器中:

    def new
      @magazine = Magazine.new
      @magazinepages = @magazine.magazinepages.build
    end
    

    <% form_for(@magazine) do |f| %>
      <%= error_messages_for :magazine %>
      <%= error_messages_for :magazinepages %>
      <fieldset>
        <legend><%= t('new_magazine') %></legend>
          <p>
            <%= f.label :title %>
            <%= f.text_field :title %>
          </p>
          <fieldset>
            <legend><%= t('new_magazine_pages') %>
              <% f.fields_for :magazinepages do |p| %>
                <p>
                  <%= p.label :name %>
                  <%= p.text_field :name %>
                </p>
                <p>
                  <%= p.file_field :filepath %>
                </p>
              <% end %>
          </fieldset>
        <p>
          <%= f.submit :save %>
        </p>
      </fieldset>
    <% end %>
    

    问题是,若我想提交一个杂志集,activerecord投诉,因为它应该是一个模型,而不是一个数组。

    def create
      @magazine = Magazine.new params[:magazine]
      @magazine.save ? redirect_to(@magazine) : render(:action => 'new')
    end
    
    2 回复  |  直到 17 年前
        1
  •  0
  •   nfm    17 年前

    我不是100%确定你在问什么,但是如果你想实例化一个新的杂志,有很多杂志,你需要在每个杂志页面上迭代。大概是这样的:

    def create
      @magazine = Magazine.new(params[:magazine])
      if params[:magazinepages]
        params[:magazinepages].each do |page|
          @magazine.magazinepages.build(page)
        end
      end
    
      # Save the model, do your redirection or rendering invalid model etc
    end
    
        2
  •  0
  •   Sameer C    15 年前

    在杂志中:

    接受:magazinepages的\u嵌套\u属性\u

    new(params[:magage])将自动为您处理对象层次结构