2016-01-01 4 views
-1

В моем приложении rails у меня есть страница с элементами, которая содержит теги для элемента. Пользователи могут добавлять теги к элементам. Я хочу, чтобы текущий пользователь мог удалять теги, но только для тегов, которые были добавлены текущим пользователем к этому конкретному элементу. Я хочу сделать это через ajax. Мой код, чтобы сделать список тегов для представления выглядит следующим образом:Как разрешить текущему пользователю удалять принадлежащие тегам с помощью act-as-taggable-on

<div id="tags">Tags: 
    <% @item.all_tags_list.each do |t| %> 
    <span class="tag-container"> 
     <%= link_to t, tag_path(t) %> 
     <% if @item.tags_from(current_user).include?(t) %> 
     <span> 
      <%= link_to "×", '#' %> 
     </span> 
     <% end %> 
    </span> 
    <% end %> 
</div> 

Сформированная строка выглядит примерно так: Tags: tag1 tag2 tag3 x. В этом случае текущий тег только тег3 был добавлен текущим пользователем. Я хочу, чтобы текущий пользователь мог щелкнуть x и удалить tag3 из элемента. Если tag2 также был добавлен текущим пользователем, он будет выглядеть так: Tags: tag1 tag2 x tag3 x.

Как настроить маршрут и метод для элемента item_controller для этого? Я считаю, что это будет в конечном итоге что-то вроде:

def remove_tag 
    @item = Item.find_by_id(params[:id]) 
    tag = ???????? 
    @item.all_tags_list.remove(tag) 
    @item.save 
    respond_to do |format| 
    format.js 
    end 
end 

но как я могу сказать контроллеру, какой тег я хочу удалить при нажатии х, и как бы я создать маршрут. Вероятно, будет несколько тегов с x рядом с ними на данной странице.

+0

Не ваш полный ответ, но если вы хотите, чтобы current_user удалял только теги, что-то вроде этого: 'tag = current_user.tags.find (params [: id])', поэтому в основном вам нужно указать его только текущим пользователям теги. –

+0

Я не думаю, что это правильно. Я хочу удалить теги на элементе, принадлежащем текущему пользователю. Ваша строка кода найдет теги для пользователя, которые в моем случае их нет. – user4584963

+0

Концепция такая же. Затем разверните часть 'current_user.items.find (...)'. –

ответ

0

Если вы используете что-то вроде устройства для аутентификации, у вас есть метод current_user в вашем контроллере, который указывает на фактическую входную модель пользователя.

Тогда, если у вас есть ассоциации, подобные этим:

class User < ActiveRecord::Base 
    has_many :items 
end 

class Item < ActiveRecord::Base 
    has_many :tags 
end 

Вы можете использовать эти ассоциации искать теги, которые принадлежащие к элементам current_user создан.

Как:

def show 
    @item = current_user.items.find(params[item:id]) 
    @tag = item.tags.find(params[:id]) 
end 

маршруты:

resources :items do 
    resources :tags 
end 

Это только для примера.

+0

Мне по-прежнему нужен способ настроить таргетинг на конкретный тег, который нужно удалить. Пользователь может иметь несколько принадлежащих тегов для данного элемента. Текущий пользователь должен иметь возможность видеть все теги на элементе, но только удалять теги, принадлежащие текущему пользователю. Я не понимаю код маршрута, который вы опубликовали. – user4584963

 Смежные вопросы

  • Нет связанных вопросов^_^