0

many-to-many投稿モデルとカテゴリモデルの間に関連付けがあります。postのネストされた属性としてcategoryフィールドを追加しました:

post_controller.rb:

  def new
    @post = Post.new
  end

posts / 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>]

余分な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、データベースに存在しないカテゴリを指すエントリがあるかどうかを確認します。

:dependentまた、レールのリレーションの属性を調べて、データの整合性を確保することもできます。たとえば、両方のモデルでhas_many :categorizations, :dependent => :destroyorと. これには、レールを介して投稿またはカテゴリを削除すると、すべての参照も破棄されるという効果があります。has_many :categorizations, :dependent => :deletePostCategory

于 2012-11-23T11:35:21.477 に答える