0

Act_As_Taggable_Ongemを使用して単純なプロジェクトタグ付けアプリケーションを作成しています。

プロジェクトを追加し、各プロジェクトにタグ(私の場合は'types' /'type_list')を追加するとうまくいきます。私が行き詰まっているのは、Act_As_Taggable_Onを使用して個々のタグを削除する方法です。私が欲しいのは、各タグの横にある「x」テキストリンク(リンクを参照)をクリックして、そのプロジェクトのtype_listからタグを削除できるようにすることです。

ドキュメントを検索して、次のような方法を見つけました。

project.type_list.remove("your tag")

しかし、私が助けを必要としているのは、特定のタグでremoveメソッドを呼び出す方法です。特に、すべてが.eachdoで繰り返されているためです。

私のコントローラーとモデルコードは、Act_As_Taggable_Onドキュメントに基づいて、非常に最小限で標準的です。上記のレイアウトを生成するためのビューコードは次のとおりです。

<h1><%= @title %></h1>
<div class="column-left">
  <% @projects.each do |project| %>
    <div class="p_wrapper">

      <table>
        <tr>
          <td><div class="project p_name"><%= project.name %></div></td>
          <td><div class="p_link"><%= link_to 'Edit', edit_project_path(project) %></div></td>
          <td><div class="p_link"><%= link_to 'Nuke', project, :confirm => 'Are you sure?', :method => :delete %></div></td>
        </tr>
      </table>

      <table>
        <tr>
          <td>
              <% project.type_list.each do |tag|%>
                <div class="p_tag">
                <%= tag %> 
                <%= link_to "x", # %> <!-- THIS IS THE PART I'M STUCK ON -->
              </div> 
              <% end %>
            </td>
        </tr>
      </table>

      <table>
        <tr>
            <td>
              <%= form_for(project) do |f| %>
              <%= f.text_field :inject_tags %>  
              <%= f.submit "Add Tag" %>
              <% end %>
            </td>
        </tr>
      </table>

    </div>

  <% end %>

  <br />

  <%= link_to 'Add new project', new_project_path %>
</div>

誰かが私を正しい方向に向けることができますか?説明されているように実際にタグを削除できるように、これを正しく実装していますか?

みんなありがとう!

4

2 に答える 2

1

次のように、プロジェクトコントローラに新しいメソッドを追加するだけです。

def remove_tag
  Project.find(params[:id]).type_list.remove(params[:tag])
end

そしてあなたのルートファイルで

resources :projects do
  member do
    put 'remove_tag', :as => :remove_tag
  end
end

そしてあなたの見解では

<%= link_to 'x', remove_tag_project_path(project), :tag => tag, :method => :put %>

もちろん、衛生状態を追加する必要がありますが、このように機能するはずです...

于 2012-04-07T16:06:53.017 に答える
0

@Vapireの提案したコードに基づいて、最終的に実用的なソリューションを作成しました。ビュー、ルート、およびコントローラーのわずかな編集。ここで何か危険なことがあれば教えてください-それでもRuby/Railsをよく理解しようとしているので、すべての提案/リファクタリングのアイデアを歓迎します。

更新されたテストサイトはproject-list.heroku.comにあります。

現在のプロジェクトを検索するようにプロジェクトコントローラを更新し、ルートを介してインデックスビューから渡された:tagを削除します。

def remove_tag
  @project = Project.find(params[:id])
  @project.type_list.remove(params[:tag])
  @project.save
  redirect_to projects_path, :flash => { :success => "Updated - tag nuked."}
end

更新されたルート:

resources :projects
match 'projects/:id/remove_tag/:tag' => 'projects#remove_tag'

link_to'x'コードを更新して、上記の更新されたルートを介して:tagparamsを渡します。

<% project.type_list.each do |tag|%>
  <div class="p_tag">
    <%= tag %> 
    <%= link_to 'x', {:action => "remove_tag", :id => project.id, :tag => tag, 
    :controller => "projects"} %>
  </div> 
<% end %>

これは明らかに私にとって新しい根拠ですので、この問題を処理する別の/より良い方法があれば教えてください!また、@ Vapireの助けに感謝します!

于 2012-04-08T05:17:16.077 に答える