关系has_and_belongs_to_many不保存数据

时间:2014-03-22 11:32:40

标签: ruby-on-rails ruby

我已经迁移了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 console Words.find(1).tags中写入时,我得到空数组。

1 个答案:

答案 0 :(得分:2)

您需要使用<< ActiveRecord方法添加到您拥有的相应馆藏中:

#app/controllers/words_controller.rb
def add_tag
    word = Word.find(params[:id])
    tag = Tag.find(params[:id])

    word.tags << tag
end

您的问题可能是由于您未正确保存数据或未正确调用数据而造成的


<强>更新

如果您想在创建新word后向tags的{​​{1}}集合添加标签,则可以执行以下操作:

word