2011-10-20 8 views
0

Ruby on Railsを使用して、Stackoverflowのようにプロジェクト投稿を追加できます。私は通常のMySQLデータベースでこれを行うことができますが、Mongoidとどのように動作するかはわかりません。MongoidとRuby on Railsの記事を追加中にユーザーに「タグ」を追加させる

これは、プロセスがどのように動作するかです:

  1. ユーザーは、プロジェクト(クライアント、日付、説明)
  2. に関するいくつかの詳細は、彼らは単にそれぞれの間にスペースを追加する必要がStackOverflowの、などのタグを追加書き込み1。
  3. は私のモデルでは、私は、配列(スペースがある分割)にタグを分割しようとすると、その後のタグを1つずつ保存今

ポストを提出してください。ただし、プロジェクトとタグの行は互いに参照しません。プロジェクト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 

これらの参照IDを追加する方法のように任意のアイデア?ありがとう!

+0

ああ、と入力_form.html.erbこの

<%= f.label :tag_names %>
<%= f.text_field :tag_names %>

+0

StackOverflowのは、実際になり、タグを分割するためにJavaScriptを使用して、彼らは前処理しなければわからないが、それましたフロントエンドで自明です。 –

+0

問題はタグの分割ではありません。私はそれを得ることができます。 tag_idsが参照されています。私はそのタグで参照されているプロジェクトとproject_idです。 –

答えて

1

私はあなたがこれを行うために必要があると思う:

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

私はproject_id = self.idを指定し、次に:project_ids => [project_id]というタグを指定しました。タグにはproject_idsが与えられ、プロジェクトは自動的にtag_idsを追加しました。みんな、ありがとう。 –

+0

私はまったく同じ問題を抱えており、それは私を夢中にさせます! idsを直接割り当てるより良い解決策を見つけましたか? –

+0

私の答えがうまくいかない理由を説明できますか? <<割り当てはあなたのために外部IDを処理する必要があります。 –