2009-08-20 13 views
0

Rails 2.3でこの作業を行うにはどうすればよいですか?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 %> 

問題は、私はmagazinepagesのコレクションを提出したい場合は、それが予想されますので、苦情をActiveRecordの、ありますモデルであり、配列ではありません。

アクションを作成:

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

自動的にオブジェクト階層を処理するあなたが投稿することができますスタックトレースと共に完全なエラーメッセージ? – ryanb

+0

これはシンタックス・トラップだったはずです。それは完全に動作します –

答えて

0

:このような何か、その後

0

私はあなたが求めているものを100%わからないんだけど、あなたは多くのmagazinepagesで、新しい雑誌をインスタンス化しようとしているならば、あなたは反復処理する必要があります各雑誌のページ。 accepts_nested_attributes_for

:magazinepages

Magazine.new(のparams [:雑誌])が雑誌で

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

私はそれがそのようにできることは知っていますが、行の数を減らしたいので、作成アクションでは1行だけでした –

関連する問題