Rails Nested Model Form с has_many через отношение и вызов сборки - PullRequest
2 голосов
/ 23 декабря 2009

Я строю одностраничную форму, которая создаст модель и ее отношения. Я просмотрел кучу ресурсов по сети, а также серию сложных форм на Railscasts, но, похоже, не могу найти решение моей проблемы.

Вот что у меня есть.

class Campaign < ActiveRecord::Base
  has_many :artwork_groups
  has_many :artwork_locales, :through => :artwork_groups

  accepts_nested_attributes_for :artwork_groups
  accepts_nested_attributes_for :artwork_locales
end

class ArtworkGroup < ActiveRecord::Base
  belongs_to :campaign
  has_many :artwork_locales
end

class CampaignsController < ApplicationController
  def new    
    @campaign = Campaign.new
    @locales = Locale.all

    # Build the artowrk groups and locales for the new campaign
    2.times do
      @campaign.artwork_groups.build do |ag|
        @locales.each do |locale|
          ag.artwork_locales.build(:locale_id => locale.id)
        end
        logger.debug ag.artwork_locales
      end
    end

    @games = GameVersion.all(:order => "game_key").group_by(&:game_family).sort_by{|k| k.first.name }

    respond_to do |format|
      format.html
    end
  end

На мой взгляд, у меня есть следующее (разметка удалена):

<% form_for @campaign, :html => { :multipart => true } do |campaign| %>

  <%= campaign.error_messages %>
  <%= flash[:campaign_wizard] %>

  <%= campaign.label :title %>
  <%= campaign.text_field :title %>

  <%= campaign.label :url %>
  <%= campaign.text_field :url %>

  <%= campaign.label :start_date %>
  <%= campaign.text_field :start_date, {:class=>"datetimepicker"} %>

  <%= campaign.label :end_date %>
  <%= campaign.text_field :end_date, {:class=>"datetimepicker"} %>

  <% campaign.fields_for :artwork_groups do |aw| %>

    <%= aw.label :name, "Artwork Group Name"  %>
    <%= aw.text_field :name %>

    <% aw.fields_for :artwork_locales do |al| %>

      <%= al.label :locale_id %>
      <%= al.text_field :locale_id %>

      <%= al.label :language %>
      <%= al.text_field :language %>

      <%= al.label :upstate %>
      <%= al.text_field :upstate %>

    <% end %>

  <% end %>

  <%= campaign.submit 'Save Campaign &amp; Publish' %>  

<% end %>

На мой взгляд, я получаю 2 раздела группы художественных работ, но я получаю только один языковой стандарт для каждой группы. Я ожидал по одному для каждой загруженной локали. Я предполагаю, что это проблема отношения has_many through или вложенных вызовов сборки в моем контроллере.

Любая помощь будет принята с благодарностью.

1 Ответ

4 голосов
/ 23 декабря 2009

Вы пытались добавить accepts_nested_attributes_for :artwork_locales к ArtworkGroup?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...