1

ブログ アプリにタグを追加しようとしています。

投稿にタグがないか、1 つまたは複数あることを望みます。今のところ、タグの選択を 10 個の定義済みタグに制限したいと思います。

モデルを作成する必要があります:

   post_id, tag_name
   1, sport
   1, news
   1, fun
   2, sport
   3, news

またはより広いテーブル:

   post_id, tag_sport, tag_special
   1,Yes,No,...

または、選択したタグを投稿テーブルに含めます。

   post_id, post_body, post_tags
   1, lorem ipsum, sport|news|fun

フォームはどのように見えますか?

   Free textbox separated by commas? Checkbox?

利用可能なプラグインと既存のオプションがあることは知っていますが、テーブルを介してタグを制御できるようにしたいと考えています。いくつかのチュートリアルに従いましたが、完全な解決策を提供するものではありません。

4

4 に答える 4

1

このacts-as-as-taggable-on gemを試すことができます。Railscastを見て、より良いアイデアが得られるかもしれません

于 2012-09-28T06:31:30.053 に答える
0

個人的には、「機能する可能性のある最も単純なもの」を維持するために、たとえば 10 個の事前定義されたタグを処理するだけでよい場合は、単純なシリアル化されたフィールドを使用する傾向があるかもしれません。

ただし、これには追加の労力が必要であり、タグで投稿を検索する場合にデータベースに不要な負荷がかかります (最も単純なのは LIKE クエリで、ほとんどの場合テーブル スキャンが含まれます)。

したがって、個人的には、単純なタグ付けシステムを使用しても、ほとんどの場合tags、 と だけのテーブルにidなり、タグとタグ付け可能なエンティティ間の関係になりますnamehas_and_belongs_to_many

class Post < ActiveRecord::Base

  has_and_belongs_to_many :tags

そしてでTag

class Tag < ActiveRecord::Base

  attr_accessible :name

  has_and_belongs_to_many :posts

  validates :name, presence: true, uniqueness: {case_sensitive: false}  

もちろん、これは移行を記述して適切な結合テーブルを作成する必要があることを意味します。たとえば、次のようになります。

class CreatePostsTags < ActiveRecord::Migration
  def change
    create_table :posts_tags do |t|
      t.references :post, null: false
      t.references :tag, null: false
    end
  end
end

このようにして、データベース スキーマも通常の形式で保持されます。

タグで検索するには、次のようになります。

Tag.find_by_name('news').posts

(実際には、自分に合ったTag.named(name)方法が必要strip.downcase nameになります。)

フォームに関しても、最終的に最も簡単なのは、タグがコンマで区切られた単なるテキスト フィールドです (したがって、コンマ文字はタグ名で有効な文字ではありません)。または、タグ名にスペースを使用できない場合は、スペースを区切り文字として使用できます。

于 2012-09-28T06:43:26.673 に答える
0

ここでは完全な解決策は得られません。SO はコード ディスペンサーではありません。

ここにあるのは、典型的な n 対 m の関係です。投稿には多くのタグを付けることができます (最大 10 個のタグの制限はこれには関係ありません)。タグは多くの投稿の一部にすることができます。

n 対 m の関係は、2 つの追加テーブルを使用してモデル化されます。1 つは関連モデル (タグ) 用で、もう 1 つは関係を保存するためです。

これにより、(投稿テーブルが投稿という名前であると仮定して)

posts_tags次のようなテーブル:

id
post_id
tag_id

そしてテーブルtags

id
tagname

この関係は、次の方法でモデルに記述されます。has_and_belongs_to_many

投稿に 1 つのタグしか付けられない場合は、1 対多の関係を使用するだけでこれを簡素化できます。

デザインとタグの数が少ないため、チェックボックスをたくさん使用します。しかし、それはあなた次第です。Rails を使用した n:m の視覚化の例は、Web 上にあります。

于 2012-09-28T06:47:40.120 に答える
0

私の提案は、書籍とタグの使用habtm関係です。

   class < books
     has_and_belongs_to_many :tags
     validates :no_of_tags


     def no_of_tags
        if self.tags.length < 4 #your choiche
          false
        end
     end
   end


   class < tags
     has_and_belongs_to_many :books
   end

さらに、テーブル books_posts を作成します

これはあなたの問題を解決します

于 2012-09-28T07:36:36.283 に答える