2009-08-20 14 views
0

Wie kann ich das in Rails 2.3 machen?Verschachteltes Modell mit Sammlung in Rails 2.3

class Magazine < ActiveRecord::Base 
    has_many :magazinepages 
end 

class Magazinepage < ActiveRecord::Base 
    belongs_to :magazine 
end 

und dann in der Steuerung:

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

und dann die Form:

<% 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 %> 

Problem ist, wenn ich eine Sammlung von magazinepages, Active Beschwerden einreichen möchten, weil es erwartet ein Modell und kein Array.

erstellen Aktion:

def create 
    @magazine = Magazine.new params[:magazine] 
    @magazine.save ? redirect_to(@magazine) : render(:action => 'new') 
end 
+0

Können Sie nach die vollständige Fehlermeldung zusammen mit dem Stack-Trace? – ryanb

+0

Es muss ein Syntax-Rülpsen gewesen sein, es funktioniert perfekt –

Antwort

0

Im Magazin:

accepts_nested_attributes_for: magazinepages

Magazine.new (params [: Zeitschrift]) wird dann behandeln die Objekthierarchie für Sie automatisch

0

Ich bin nicht 100% sicher, was Sie fragen, aber wenn Sie versuchen, ein neues Magazin, mit vielen magazinepages zu instanziiert, müssen Sie über iterieren jede Zeitschriftenseite. Etwas wie folgt aus:

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 
+0

Ich weiß, dass es so gemacht werden kann, aber ich wollte die Anzahl der Zeilen reduzieren, so dass ich nur eine einzige Zeile in der Create-Aktion hatte –

Verwandte Themen