2011-02-01 13 views
2

まずは、この正確な質問が前にここで尋ねられたことを知っています。しかし、それは答えられていないと私は1年以上前からゾンビスレッドを持ってきて欲しくない。ブログの投稿タグをテキストフィールドから解析する

第2に、私はプラグインの使用に興味がありません。はい、ホイールを再発明したいと思います。私はRoRを学ぶためにこのブログを書いています。

私はRailsアプリケーションのタグにタグを付ける動作を再現しようとしています。

<%= form.fields_for :tags do |tag_form| %> 
    <div class="field"> 
    <%= tag_form.label :tags, 'Tags' %> <small>(comma separated)</small><br /> 
    <%= tag_form.text_field :tags %> 
    </div> 
<% end %> 

を次のように

フォームはこの

<%= form_for @post do |post_form| %> 
    ... 
    <%= render :partial => 'tags/form', 
     :locals => { :form => post_form } %> 
    ... 
<% end %> 

とタグのように見える柱が形成私はに実行している問題は、「タグ」である私のPostクラスにフィールドではありません。私のポストとタグモデルは、PostsTagsJoinTableとの間にHABTM関係を持っています。だから、どういうわけか、私のコントローラが新しいブログ投稿と一緒にタグを作成して関連付けるように、タグテキストフィールドを(s​​tring.split( '、')を使用して)解析し、結果のタグ文字列をコントローラに渡す必要があります。

は正しく私の見解のセットアップです私のコントローラがどのように見えるかPost.create特に

おかげ

答えて

2

私はあなたがプラグインでは興味がないことを理解し、彼らはこのようにそれを扱う:??! クラスPostにはtag_list=というメソッドがあり、文字列からsplit(',')を検索し、HABTM relatiからTagを検索して追加しますに。すなわち、

def tag_list=(tags) 
    self.tags.clear # clears all the relations 
    tags.split(',').each do |tag| 
    self.tags << Tag.find_by_title(tag) # and assigns once again 
    end 
end 

タグのリストを提供するために:あなたはこれでPost#tag_list=がいることを定義することができます。フォームフィールドは、既存のタグを持っているため、この操作を行います。

def tag_list 
    self.tags.collect do |tag| 
    tag.name 
    end.join(',') 
end 

だからあなたは今<%= text_field_tag :post, :tag_list, :value => @post.tag_list %>を使用することができます。

+0

ありがとうございました。 Post.createでどこに投稿するのですか?tag_list?そして、ユーザー入力タグをビューからどのように取得するのですか? –

+1

その#tag_listメソッドを**モデル** Postに入れて、フォーム内に '<%= post_form.text_field:tag_list%>'を実行します。フォームに値が割り当てられていない場合は、 '<%= post_form.text_field:tag_list、:value => @ post.tag_list%>'オプションを指定してください。 – farnoy

関連する問題