我已经迁移了tags_words
class CreateTagsWords < ActiveRecord::Migration
def change
create_table :tags_words, id: false do |t|
t.references :tag
t.references :word
end
add_index :tags_words, :tag_id
add_index :tags_words, :word_id
end
end
模型词和标签:
class Word < ActiveRecord::Base
attr_accessible :namelanguage1, :namelanguage2, :tags_attributes
has_and_belongs_to_many :tags
def self.search(search)
if search
find(:all, :conditions => ['namelanguage1 LIKE ?', "%#{search}%"])
else
find(:all)
end
end
end
class Tag < ActiveRecord::Base
attr_accessible :name, :language_user_id
has_and_belongs_to_many :words
def self.search(search)
if search
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
else
find(:all)
end
end
end
和当我将标签添加到单词,然后保存它不保存在db(当我写在rails控制台Words.find(1).tags
我得到空数组。
你需要使用<<ActiveRecord方法添加到各自的集合中:
#app/controllers/words_controller.rb
def add_tag
word = Word.find(params[:id])
tag = Tag.find(params[:id])
word.tags << tag
end
你的问题要么是你没有正确保存你的数据,要么是没有正确调用它。
如果您想在创建了新的word
之后向word
的tags
集合添加标签,您可以这样做:
#app/controllers/words_controller.rb
def create
@word = Word.new(word_params)
@word.save
end
private
def word_params
params.require(:word).permit(:namelanguage1, :namelanguage2, tag_ids: [])
end
#app/models/word.rb
Class Word < ActiveRecord::Base
attr_accessor :tag_ids
after_create :add_tags
def add_tags
if tag_ids
tag = Tag.find(tag_ids)
tags << tag
end
end
end