Вы делаете это неправильно.У вас есть method: :clone
, что недействительно .Допустимые значения для опции method
для link_to
: отправка, исправление, установка и удаление .
метод:символ HTTP-глагола - этот модификатор будет динамически создавать форму HTML и немедленно отправлять форму для обработки с использованием указанного глагола HTTP.Полезно для того, чтобы ссылки выполняли операцию POST в опасных действиях, таких как удаление записи (за которой могут следовать поисковые роботы, паукорируя ваш сайт). Поддерживаются следующие глаголы: post,: delete,: patch и: put .Обратите внимание, что если у пользователя отключен JavaScript, запрос вернется к использованию GET.Если используется href: '#' и у пользователя отключен JavaScript, нажатие на ссылку не даст никакого эффекта.Если вы полагаетесь на поведение POST, вы должны проверить его в действии вашего контроллера, используя методы объекта запроса для post ?, delete ?, patch? Или put?.
Теперь перейдем кваши маршруты, когда вы делаете rake routes
, вы увидите ниже
game_clone POST /games/:game_id/clone(.:format) games#clone
Таким образом, link_to
должно выглядеть следующим образом
<%= link_to 'Clone', game_clone_path(game), method: :post, data: { confirm: '.. sure?' } %>
Не удалось найтиИгра без ID
Хорошо, вы клонируете экземпляр Game
.Обычно вы ищите экземпляр с :id
, но с вашими текущими маршрутами :game_id
будет передан в params
, что не соответствует вашим потребностям.Вы должны изменить свои маршруты, чтобы пройти :id
вместо :game_id
.Таким образом, окончательное решение будет
Окончательное решение:
resources :games do
resources :comments
post 'clone', on: :member
end
Приведенное выше создаст вспомогательный путь со следующими значениями:
clone_game POST /games/:id/clone(.:format) games#clone
Сейчасизмените link_to
с новым помощником пути, и вы готовы идти
<%= link_to 'Clone', clone_game_path(game), method: :post, data: { confirm: '.. sure?' } %>
Примечание:
Будьте осторожны при добавлении пользовательских маршрутов на ваши изобретательные маршруты.Это создаст помощников пути с ненужными ключами, такими как :*_id
(:game_id
в вашем случае).Эти маршруты должны быть добавлены как маршрут сбора или маршрут участника в зависимости от сценария.Для получения дополнительной информации см. Эти направляющие