我正在使用我的轻量级Padrino CMS,这非常类似于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 %>
我不知道我错过了什么,但没有创建关联。我在创建过程中没有提到控制器中的类别,但我确实用现有的类别填充了下拉列表。不知何故,我想将它们与新帖相关联。
如果有人能指出我正确的方向,我将不胜感激。我得到的错误是:
/ admin / posts / create中的NoMethodError 未定义的方法`每个&#39;为零:NilClass file:collection_association.rb location:replace line:383
表单 POST 数据包含:
POST
变量authenticity_token
价值&#34; c760c21a5d1f85bfc19e179b37d56f67&#34;
category_active_record_relation {&#34; id&#34; =&gt; [&#34; 2&#34;,&#34; 3&#34;]}
交 {&#34; post_name&#34; =&gt;&#34;测试帖&#34;,&#34; post_type&#34; =&gt;&#34;博文&#34;,&#34; post_title&#34; =&gt;&#34; Postie&#34;,&#34; slug&#34; =&gt;&#34;这是一个自定义套装&#34;,&#34; post_date&#34; =&gt;&# 34; 2015-06-30&#34;,&#34; post_content&#34; =&gt;&#34; Lorem ipsum dolor sit amet consequtiv&#34;,&#34; post_excerpt&#34; =&gt;&#34 ; Lorem ipsum&#34;,&#34; post_status&#34; =&gt;&#34;已发布&#34;,&#34; comment_status&#34; =&gt;&#34;已关闭&#34;,&#34 ; COMMENT_COUNT&#34; = GT;&#34; 0&#34;}
save_and_continue&#34;保存并继续&#34;
答案 0 :(得分:1)
我已经设法回答了我自己的问题,解决方案相当容易,但也许有一个更好的,更多的魔力。无论如何使用CollectionProxy API文档,我很清楚我可以在控制器中分配这些类别。
只需在if @ post.save
之前加入 params[:category_active_record_relation]['id'].each do |category|
category = Category.find(category)
@post.categories << category
end
如果我创建新类别,我可以使用@ post.categories.build(category)方法。
希望它也能帮助别人。