我已经迁移了 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
当我将标签添加到单词然后保存时,它不会保存在数据库中(当我在 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
关于ruby-on-rails - 关系 has_and_belongs_to_many 不保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22577043/