Как указать другое действие для помощника link_to?

Я создаю веб-сайт, где пользователи могут отмечать и снимать пометки с "избранных". Я реализовал это через Ajax, используя атрибут формы Rails remote: true так что вся страница не перезагружается, просто меняется статус элемента.

У меня есть два метода в FavouritesController

def create
    Favourite.create!(item_id: params[:favourite][:item_id])    
    respond_to { |format| format.js }
end

def destroy
    Favourite.find(params[:id]).destroy!
    respond_to { |format| format.js }
end

Проблема в:

Я хочу вызвать другое действие из того же контроллера, чтобы "снять отметку" с элемента в другом представлении. Я использую код ниже, но когда я нажимаю на ссылку - старый метод destroy вызывается из контроллера вместо желаемого delete_from_index_list метод. Мне нужны два отдельных метода, потому что они возвращают разные javascript (jquery).

<%= link_to "delete", @favourite, method: :delete, remote: true, action: 'delete_from_index_list'  %>

1 ответ

Решение

Проверьте документацию link_to - я опишу, что вы хотите.

Я не проверял это, но я думаю, вы хотите:

<%= link_to "delete", controller: 'favourites', action: 'delete_from_index_list', id: @favourite, remote: true %>

Если бы это был мой код, я бы нашел маршрут для delete_from_index_list метод, и назовите его так:

<%= link_to "delete", route_for_delete_from_index_list_path(@favourite), method: :delete %>

Таким образом, он более изобретателен, в то время как первый пример не изобретателен.

Другие вопросы по тегам