我希望建立一种关系,用户可以在其中创建帖子并标记该帖子。该帖子和那些标签属于该用户。
在过去的三天里,我一直在尝试调试它。我不知道为什么当我保存我的帖子时,user_id 没有填充到 Tag 模型中。我将 user_id 添加到 Tag 模型中。
我提前为过多的代码道歉。
用户 - has_many 帖子;has_many 标签
发布 - 属于用户;has_many 标签;has_many 标签通过标签
Tag - 有很多标签;has_many 通过标签发布帖子;属于用户
标记 - belongs_to 帖子;属于_to 标签
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