2009-08-20 4 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

В журнале:

accepts_nested_attributes_for: magazinepages

Magazine.new (PARAMS [: журнал]) будет обрабатывать иерархию объектов для вас автоматически

0

Я не 100% уверен, что вы спрашиваете, но если вы пытаетесь создать экземпляр нового журнала, со многим magazinepages, вам нужно перебрать каждый журнал страница. Что-то вроде этого:

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

Я знаю, что это можно сделать так, но я хотел уменьшить количество строк, так что у меня была только одна строка в действии create –

Смежные вопросы