ユーザーが投稿を作成し、その投稿にタグを付けることができる関係をセットアップしようとしています。その投稿とそれらのタグはそのユーザーのものです。
過去 3 日間、これをデバッグしようとしています。投稿を保存すると、user_id が Tag モデルに入力されない理由がわかりません。Tag モデルに user_id を追加しました。
過度のコードについては、あらかじめお詫び申し上げます。
ユーザー - has_many の投稿; has_many タグ
投稿 - ユーザーに属する; has_many のタグ付け; タグ付けによる has_many タグ
タグ - 多くのタグ付けがあります。タグ付けによる has_many の投稿。所属するユーザー
タグ付け - 投稿に属します。所属タグ
ActiveRecord::Schema.define(:version => 20121031012555) do
create_table "posts", :force => true do |t|
t.integer "user_id"
t.string "summary"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "taggings", :force => true do |t|
t.integer "post_id"
t.integer "tag_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "taggings", ["post_id"], :name => "index_taggings_on_post_id"
add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
create_table "tags", :force => true do |t|
t.string "name"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "users", :force => true do |t|
t.string "username"
t.string "email"
t.string "crypted_password"
t.string "password_salt"
t.string "persistence_token"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "role"
end
end
投稿モデルで:
def tag_ids=(tags_string)
self.taggings.destroy_all
tag_names = tags_string.split(",").collect{|s| s.strip.downcase}.uniq
tag_names.each do |tag_name|
tag = Tag.find_or_create_by_name(tag_name)
tagging = self.taggings.new
tagging.tag_id = tag.id
end
end