Я работаю над своей облегченной CMS Padrino, которая очень похожа по функциям на Wordpress. При создании нового сообщения я хочу иметь возможность назначать их многим из существующих категорий. Почему-то не могу заставить свою форму работать.
Мои модели выглядят так:
Почтовая модель
class Post < ActiveRecord::Base
belongs_to :account
has_many :categorizations
has_many :categories, :through => :categorizations
accepts_nested_attributes_for :categories
end
Модель категории
class Category < ActiveRecord::Base
has_many :categorizations
has_many :posts, :through => :categorizations
belongs_to :category
end
Модель категоризации
class Categorization < ActiveRecord::Base
belongs_to :post
belongs_to :category
end
Я также создал миграцию для совместной таблицы
class CreateCategorizations < ActiveRecord::Migration
def self.up
create_table :categorizations do |t|
t.integer :category_id
t.integer :post_id
t.timestamps
end
end
def self.down
drop_table :categorizations
end
end
И вот связанная часть формы
<% fields_for :categories do |c| %>
<fieldset class='control-group <%= error ? 'has-error' : ''%>'>
<%= c.label 'Category title', :class => 'control-label' %>
<div class='controls'>
<%= c.select(:id, :collection => @categories, :fields => [:title, :id], :include_blank => true, :multiple => true, :class => 'form-control input-xlarge input-with-feedback') %>
<span class='help-inline'><%= error ? c.error_message_on(:id) : "Select a category if there is a parent category" %></span>
</div>
</fieldset>
<% end %>
Я не знаю, что мне не хватает, но ассоциация не создается. Я не упоминаю категории в контроллере во время создания, но заполняю раскрывающийся список существующими категориями. Как-то хотелось связать их с новым постом.
Я буду очень признателен, если кто-то может указать мне правильное направление с этим. Ошибка, которую я получаю, заключается в следующем:
NoMethodError в /admin/posts/create undefined method `each' for nil:NilClass file: collection_association.rb location: replace line: 383
Данные формы POST содержат следующее:
ПОЧТА
Переменная подлинность_токен
Значение c760c21a5d1f85bfc19e179b37d56f67
category_active_record_relation {id=›[2, 3]}
post {post_name=›Test post, post_type=›blogpost, post_title=›Postie, slug=›Это пользовательский набор slug, post_date=›2015-06-30, post_content=›Lorem ipsum dolor sit amet consequtiv, post_excerpt=› Lorem ipsum, post_status=›опубликовано, comment_status=›закрыто, comment_count=›0}
save_and_continue Сохранить и продолжить