AFAIK, «путь Rails» для этого состоит в использовании map.resource
или map.resources
, и если имена по умолчанию не имеют смысла, вы можете переименовать их с помощью опции :path_names
.
Например:
map.resource :newsletter, :only => [:new, :destroy], :path_names => { :new => 'signup', :destroy => 'unsign' }
EDIT:
Я только что понял, что мне не хватает эквивалента «create», который использовался бы для фактического обновления базы данных («new» - это отображение страницы с вопросом, хочет ли пользователь подписаться на рассылку новостей). ). Поэтому, если вы хотите включить этот призыв к действию, встроенный в другую страницу, тогда «новый» маршрут может не потребоваться.
Создание контроллера и маршрута
В этом случае мы на самом деле говорим не о ресурсе новостной рассылки, а о ресурсе регистрации новостной рассылки. Это означало бы, что контроллер будет называться NewsletterSignup , и следующий маршрут будет более подходящим:
map.resource :newsletter_signup, :only => [:create, :destroy]
Это позволит вам встраивать ссылки / кнопки в существующую страницу, которая отправляет запросы на подписку или отписку от рассылки. Действия, выполняемые за этими ссылками, будут использовать обычный шаблон действия и перенаправления для выполнения обновлений.
Ссылки будут выглядеть примерно так:
POST to /newsletter_signup
DELETE to /newsletter_signup/1
Отображение сообщения
Наконец, Rails-способ показать сообщение «Спасибо за подписку на рассылку» - использовать «флеш-сообщение». Это включает следующий код в действии create контроллера NewsletterSignup:
flash[:notice] = 'Thanks for signing up to the newsletter!'
Вы показываете это в виде страницы, на которую затем перенаправляется действие (на какую страницу была включена ссылка / кнопка регистрации), которая затем может включать сообщение:
<% if flash[:notice] %>
<p class="notice"><%= flash[:notice] %></p>
<% end %>
При частом использовании фрагмент, подобный приведенному выше, можно добавить в макет, чтобы его можно было отобразить на любой странице.