2009-07-08 9 views
2

Entryモデルはhas_many :tagsです。私は、テキスト入力(すなわち、 "tag-1、tag-2"など)で自分のタグをリストしたいと思っていますが、私は問題にぶつかっています。私はちょうど特定の関連付けコレクションに対してカスタムto_sメソッドを作成できますか?

form_for(:entry, form_options) do |f| 
    f.text_field :tags 
end 

を使用する場合は

私のテキストボックスが作成されますが、私が探しているものを明らかにではありません#<Tag:0xb79fb584>#<Tag:0xb79faddc>のようなもの、で満たされています。

は私がタグを付けるためのto_sメソッドを追加することができます知っている:

class Tag < ActiveRecord::Base 
    def to_s 
    name # the name of the tag 
    end 
end 

しかし、それはちょうど、まだただArray#to_sを指しtag-1tag-2@entry.tags.to_sためのようなものを私に残します。正しい文字列が表示されますが、物事の「レールウェイ」のように感じることはありません。今、私は

f.text_field :tags, :value => @entry.tags.map(&:name).join(", ") 

代わりに使用しています

、。私のカスタムto_sメソッドを具体的に私のtagsに追加する方法はありますか?

答えて

1

これを実行するより良い方法があります:仮想属性。 This exampleは、バーチャルアトリビュートを使用してタグアソシエーションを処理する方法を正確に示しています。

3

ハックと恐ろしいの種類がありますが、可能性が

alias_method_chain :tags, :fancy_to_s 
def tags_with_fancy_to_s 
    assoc = tags_without_fancy_to_s 
    def assoc.to_s; map(&:name).join(", "); end 
    assoc 
end 

作業する必要があること。

また、メソッド "tags_string"を作成して、オブジェクトシステム/メンテナンスコーダーの脳を乱用することなく同じことをすることもできます。

+0

私はメンテナンスコーダーです(個人的なプロジェクトなので、心配しません)。私は 'tag_names'メソッドを追加することを検討しましたが、そのためのトレードオフはコントローラに@ entry.tagsを保存するための余分なコードが必要なことです。 –

+0

falseの場合、モデル(タグの所在地)にtags_string =を定義し、名前で標準タグの検索または作成を処理します。さらに、acts_as_taggable_on_steroidsなどを使用して、すべて無料で入手できます。 –

関連する問題