No route matches [POST] "/статьи / Новые"
когда я пытаюсь отправить форму, она дает мне ошибку
No route matches [POST] "/articles/new"
файлы: новые.формат html.Эрб
этот файл содержит форму с текстовым полем и текстовой областью:
<%= form_for :article, url: articles_path do |f| %>
ЗДЕСЬ url: должен соответствовать запросу post, который является create
формы!--10--><%= f.label :title %><br>
форма поля
<%= f.text_field :title %></p>
формы!--10-->
<%= f.label :text %><br>
текстовая область формы
<%= f.text_area :text %></p>
<p>
<%= f.submit %>
</p>
<% end %>
файл маршрута
Rails.application.routes.draw do
resources :article
end
контроллер-это контроллер со своими методами new и create
всякий раз, когда я отправляю форму с ошибкой, даже я использовал URL: articles_path, который для запроса post по умолчанию я использовал @articles также в форме, но он дает мне ту же ошибку. Я новичок в рельсах, поэтому я пробовал много способов, но я не мог найти решение
class ArticlesController < ApplicationController
def new #new method which is a get request
end
def create #create method which is a post request
end
end
всякий раз, когда я отправляю форму с ошибкой, даже я использовал url: articles_path, который для запрос POST по умолчанию. и я держал
def create
end
в контроллере
6 ответов
изменения:
resources :article
в:
resources :articles #plural
таким образом, он будет карты:
articles_path POST /articles(.:format) articles#create
причина, по которой это происходит для многих людей, использующих этот учебник, заключается в том, что они не перезагружают форму после изменения URL-адресом на form_for помощником.
обязательно перезагрузите новую копию формы, прежде чем пытаться отправить ее (вам нужна форма, чтобы иметь самый последний url-адрес отправки формы).
ваши действия/методы в контроллере ничего не делать. Это должно быть что-то вроде:
class ArticlesController < ApplicationController
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render 'new'
end
end
private
def article_params
params.require(:article).permit()# here go you parameters for an article
end
end
в виде:
<%= form_for @article do |f| %>
Я изменил app / views / articles / new.формат html.erb from:
<%= form_for :article do |f| %>
в:
<%= form_for :article, url: articles_path do |f| %>
RedZagogulin
s ответ правильный-это код, который вам нужно использовать в вашем articles
контроллер
--
маршруты
ключ к вашей проблеме здесь:
No route matches [POST] "/articles/new"
обычно при использовании правильная структура маршрутизации:
#config/routes.rb
resources :articles #-> needs to be controller name
вы найдете, что new
действие GET
, а не POST
. Это заставляет меня поверить, что ваша система настроена неправильно (она пытается отправить форма данных articles/new
, когда он должен просто направить [POST] articles
если вы выполните шаги, описанные RedZagogulin
, он должен работать для вас
Я постоянно сталкивался с этой проблемой, и это сводилось к тому, что у меня был следующий код в моем navbar:
<%= link_to "Blog", controller: 'articles' %>
я переключился на это и все начали работать:
<%= link_to "Blog", articles_path %>
Я все еще новичок в этом, поэтому разные способы делать вещи иногда запутываются.