我的帖子和类别模型之间有many-to-many
关联。
我将category字段添加为post:
posts_controller.rb:
def new
@post = Post.new
end
帖/ new.html.erb:
<%= f.select :category_ids, Category.all.collect {|c| [c.name, c.id]} %>
categorization.rb:
class Categorization < ActiveRecord::Base
attr_accessible :category_id, :post_id, :position
belongs_to :post
belongs_to :category
end
category.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>]
我不知道额外的零类别来自哪里。
可能是什么原因?
修改
发布新内容:
提交后
生成的HTML:
答案 0 :(得分:1)
我不认为这是HTML或Rails代码中的问题。我认为你有数据完整性问题。
如果我是你,我会检查数据库中是否有Categorization
条目指向不再存在的类别。
此外,您可能希望查看有关rails中关系的:dependent
属性以实现数据完整性,例如我会在两个模型has_many :categorizations, :dependent => :destroy
和has_many :categorizations, :dependent => :delete
中写Post
或Category
。这样做的结果是,如果您通过rails删除帖子或类别,所有引用也会被销毁。
答案 1 :(得分: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