0

我的many-to-many帖子和类别模型之间存在关联。我将类别字段添加为帖子的嵌套属性:

post_controller.rb:

  def new
    @post = Post.new
  end

帖子/new.html.erb:

<%= f.select :category_ids, Category.all.collect {|c| [c.name, c.id]} %>

分类.rb:

class Categorization < ActiveRecord::Base
  attr_accessible :category_id, :post_id, :position

  belongs_to :post
  belongs_to :category
end

类别.rb:

class Category < ActiveRecord::Base
  attr_accessible :name

  has_many :categorizations
  has_many :posts, :through => :categorizations  

  validates :name, presence: true, length: { maximum: 14 }
end

post.rb:

class Post < ActiveRecord::Base
  attr_accessible :title, :content, :category_ids

  has_many :categorizations
  has_many :categories, :through => :categorizations  
end

<%= f.select :category_ids, Category.all.collect {|c| [c.name, c.id]} %>

现在,提交表单后,我得到如下信息:

[#<Category id: 2, name: "Design", created_at: "2012-11-23 10:12:54", updated_at: "2012-11-23 10:12:54">, #<Category id: nil, name: nil, created_at: nil, updated_at: nil>]

我不知道额外的 nil 类别来自哪里。

可能是什么原因?

编辑:

发布新的:

在此处输入图像描述

提交后生成的html:

在此处输入图像描述

4

2 回答 2

1

我意识到了这个问题。在我的后控制器中有这个:

 def show
    @post = Post.find(params[:id])
    @replies = @post.replies.paginate(page: params[:page])
    @reply = @post.replies.build
    @category = @post.categories.build # this was the problem
    @vote = Vote.new
    store_location
  end
于 2012-11-23T11:55:45.060 回答
1

我不认为这是 HTML 或 Rails 代码中的问题。我认为您有数据完整性问题。

如果我是你,我会检查Categorization数据库中是否有指向不再存在的类别的条目。

此外,也许您想检查:dependentrails 中关系的属性以实现数据完整性,例如,我会在两个模型中编写has_many :categorizations, :dependent => :destroy或编写. 这样做的效果是,如果您通过 rails 删除帖子或类别,所有引用也会被销毁。has_many :categorizations, :dependent => :deletePostCategory

于 2012-11-23T11:35:21.477 回答