Пользователь может добавлять теги при добавлении статьи с Mongoid и Ruby on Rails - PullRequest
0 голосов
/ 20 октября 2011

Я использую Ruby on Rails, чтобы позволить пользователю добавить пост проекта, очень похожий на Stackoverflow.Я могу сделать это с обычной базой данных MySQL, но я не уверен, как она работает с Mongoid.

Вот как работает этот процесс:

  1. Пользователь пишет некоторые подробности опроект (клиент, дата, описание)
  2. Добавьте теги, например Stackoverflow, где им просто нужно добавить пробел между каждым.
  3. Отправить сообщение

Теперь в моей модели я пытаюсь разбить теги на массивы (разделяя их там, где есть пробел), а затем сохраняю теги один за другим.Однако строка для проекта и тега не ссылаются друг на друга.Project tag_ids = [] и тег 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

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

Любые идеи относительно того, какдобавить эти ссылочные идентификаторы?Спасибо!

1 Ответ

1 голос
/ 21 октября 2011

Я думаю, вам нужно сделать это:

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