ruby-on-rails - 关系 has_and_belongs_to_many 不保存数据

标签 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

当我将标签添加到单词然后保存时,它不会保存在数据库中(当我在 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之后添加标签到wordtags集合,你将能够做这样的事情:

#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/

相关文章:

ruby-on-rails - 如何从 Rails 取消昂贵的 Postgresql 查询?

ruby-on-rails - 如何在 Ruby on Rails 上嵌入带有 ActionText/Trix 的 iframe?

mysql - 此 Ruby on Rails 代码是否容易受到 SQL 注入(inject)攻击?

ruby - 我可以在开始的项目中以 TDD 或 BDD 为目标吗?

Ruby readpartial 和 read_nonblock 不抛出 EOFError

ruby-on-rails - Ruby On Rails 4.2 的可视化日志查看器

ruby - 使用正则表达式添加/替换分隔符

ruby-on-rails - 如何从 Spree 的结帐流程中删除注册的第一步?

ruby-on-rails - JSON::JWS::验证失败异常

ruby - 使用 --out 时如何摆脱添加到 rspec 的持续时间?