Вызовите несколько методов контроллера по ссылке

Я работаю над тем, чтобы в моем приложении работала система оплаты за клик, и я смог получить некоторую помощь в настройке фреймворка здесь, на SO. Вот что у меня так далеко:

class Click < ActiveRecord::Base
    belongs_to :deal
    belongs_to :vendor
end

class ClicksController < ApplicationController
    def create
        @deal = Deal.find(params[:deal_id])
        @deal.clicks.create
    end
end

class Deal < ActiveRecord::Base
    belongs_to  :vendor
    has_many    :clicks
end

Я хочу иметь возможность позвонить моему create Метод в любое время у меня есть ссылка на ресурс сделки. При щелчке пользователь будет переведен в это представление сделок, поэтому я не хочу заменять метод по умолчанию в link_to. Есть ли способ вызвать второй метод на link_to? Или, возможно, использование JavaScript было бы лучшим решением? Честно говоря, я относительно новичок в RoR, и я совсем не знаю много JavaScript. Любые предложения о том, как лучше всего это сделать? Заранее спасибо!

1 ответ

Решение

Похоже, вы хотите следующее:

  • пользователь нажимает на ссылку, которая приведет к сделке
  • Клик создан для этой сделки
  • пользователь видит страницу сделки

Я думаю, что есть два достойных способа сделать это. Одним из них является обработка ссылок как кнопок, выполняющих POST для ClicksController. Другой - иметь фильтр after_filter в DealsController.

Первый будет означать изменение ваших ссылок для указания на ClicksController, использование POST (которое по умолчанию указывает на действие #create) и перенаправление в конце действия #create для

redirect_to @deal

Смотрите link_to документы для получения дополнительной информации.

Это выглядит более RESTful, хотя link_to может показаться немного уродливым.

Последний вариант означает добавление чего-то вроде

after_filter -> { @deal.clicks.create }

для метода DealsController#show.

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