Ruby on Rails - заполняет новый рекорд - PullRequest
0 голосов
/ 09 августа 2010

У меня есть форма для вложенного ресурса (Client: has_many Workouts), который я хочу предварительно заполнить на основе некоторого пользовательского ввода (я использую этот ввод для настройки некоторых других параметров по умолчанию для нового действия).

<%  form_tag new_client_workout_path(@workout_user) do%>
    <%= date_select nil, :date %>
    <%= submit_tag 'Enter New Workout' %><br/>
<% end %>

Если я отправлю эту форму, я получу следующую ошибку.

ActionController::MethodNotAllowed Only get, put, and delete requests are allowed.

Я могу обновить метод формы, чтобы получить, который работает, но тогда у меня есть все мои параметры формы в строке запроса, которые я не хочу.

Есть ли способ сделать это, используя сообщение?

Я делал нечто подобное, когда ресурс не был вложенным, и он работал нормально.

Ответы [ 3 ]

1 голос
/ 09 августа 2010

Итак, насколько я понимаю, вы хотите, чтобы форма (как показано) отправлялась в виде POST на контроллер, что приводит к отображению другой формы, предварительно заполненной параметрами, ориентированными на дату (из первой формы), верно?

Это нетрадиционно, но вы можете просто изменить действие new вашего WorkoutsController, поэтому принимайте POST вместо обычного GET.В routes.rb

map.resources :clients do |clients|
  clients.resources :workouts, :new => { :new => :post }
end

ОБНОВЛЕНИЕ

Чистый способ RESTful сделать что-то подобное, это иметь отдельный контроллер (рабочее название - ConfigWorkoutsContoller) идействия (new и create) для первой формы следующие:

  • ConfigWorkoutsContoller#new отображает форму (как показано), которая представляет собой GET
  • Его действие отправкиPOST к действию create с date
  • ConfigWorkoutsContoller#create предварительно заполняет экземпляр @workout и отображает WorkoutsController#new
0 голосов
/ 09 августа 2010

Мне удалось заставить его работать, добавив скрытое поле формы

<%= hidden_field_tag '_method', 'get' %>

, чтобы метод формы был post, а остальным - get

Не уверен, что яЯ делаю все это правильно или, если есть более приемлемый способ получить пользовательский вклад в новое действие.Обычно вы получаете все свои пользовательские данные от нового действия, но в этом случае я строю форму по-разному в зависимости от того, какую дату выбирает пользователь.

0 голосов
/ 09 августа 2010

Я не уверен, имеет ли это прямое отношение к вашей проблеме, но при использовании вложенных ресурсов вам нужно передать оба ресурса в тег формы, чтобы он генерировал правильные маршруты. Значение:

<%  form_tag new_client_workout_path(@client, @workout) do %>

Я не знаю достаточно о специфике того, что вы делаете, поэтому немного сложно получить прямой ответ. Что такое @workout_user? Как выглядят ваши маршруты?

Edit:

После просмотра вашего ответа ниже, "более чистый способ" сделать это будет:

<%  form_tag(new_client_workout_path(@workout_user), :method => :get) do %>

Примечание: направляющие , кажется, используют процитированный "get", но я думаю, что символ также работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...