让用户在使用Mongoid& amp;添加文章时添加“标签” Ruby on Rails

时间:2011-10-20 16:59:49

标签: ruby-on-rails ruby mongodb mongoid

我使用Ruby on Rails允许用户添加类似Stackoverflow的项目帖子。我可以使用常规MySQL数据库执行此操作,但我不确定它如何与Mongoid一起使用。

这是该过程的工作方式:

  1. 用户撰写有关项目的一些详细信息(客户,日期,说明)
  2. 添加Stackoverflow等标签,只需在每个标签之间添加一个空格。
  3. 提交帖子
  4. 现在在我的模型中,我尝试将标记分解为一个数组(在有空格的地方分割),然后一个接一个地保存标记。但是,项目和标记的行不会相互引用。 Project tag_ids = []和Tag project_ids = []

    project.rb模型

    class Project
      include Mongoid::Document
      include Mongoid::MultiParameterAttributes
      field :client, :type => String
      field :description, :type => String
      field :url, :type => String
      field :project_date, :type => Date
      has_and_belongs_to_many :tags
      attr_accessor :tag_names
      after_save :assign_tags
    
      def tag_names
        @tag_names || tags.map(&:name).join(" ")
      end
    
      def assign_tags
      @project = self
      @project_id = self.id
        if @tag_names
          self.tag_names = @tag_names.split(/\s+/).map do |name|
            Tag.find_or_create_by(:name => name)
          end
        end
      end
    end
    

    tag.rb model

    class Tag
      include Mongoid::Document
      field :name, :type=> String
      has_and_belongs_to_many :projects
    end
    

    有关如何添加这些参考ID的任何想法?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你需要这样做:

t = Tag.find_or_create_by(:name => name)
self.tags << t unless (self.tags.include? t)