Добавить пользовательский метод put в сгенерированный контроллер - PullRequest
0 голосов
/ 29 мая 2018

У меня есть records_controller, сгенерированный через обычный генератор scaffold_controller.Я хотел бы добавить пользовательский метод, давайте назовем его share, чтобы передать туда только один параметр с адресом электронной почты.Если в моей базе данных есть электронная почта, я хотел бы добавить связанную в id к record.

Я добавил метод обмена в records_controller:

  def share
    logger.info record_params
    logger.info params
    # check email in db and add id
    respond_to do |format|
      format.js
    end
  end

форму в представлении представления:

<%= form_tag(controller: "records", action: "share", method: "put", remote: true) do %>
  <%= label_tag(:user_email, "Share for:") %>
  <%= text_field_tag(:user_email) %>
  <%= submit_tag("Share") %>
<% end %>

и правило в маршрутах :

  put    '/records/:id/share', to: 'records#share'

Форма отображается нормально, но когда я нажимаю кнопку click, я получаю ошибку:

ActionController::RoutingError (No route matches [POST] "/records/2/share"):

1 Ответ

0 голосов
/ 30 мая 2018

Согласно исходному коду form_tag , все параметры, передаваемые помощнику, рассматриваются как url_for_options и возвращают неверный вывод, подобный следующему:

<form action="/records/2/share?method=put&amp;remote=true" method="post">

Youнеобходимо указать, какие параметры url_for_options, а какие только options:

<%= form_tag({controller: "records", action: "share"}, method: 'put', remote: true) do %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...