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| %>


RedZagogulins ответ правильный-это код, который вам нужно использовать в вашем articles контроллер

--

маршруты

ключ к вашей проблеме здесь:

No route matches [POST] "/articles/new"

обычно при использовании правильная структура маршрутизации:

#config/routes.rb
resources :articles #-> needs to be controller name

вы найдете, что new действие GET, а не POST. Это заставляет меня поверить, что ваша система настроена неправильно (она пытается отправить форма данных articles/new, когда он должен просто направить [POST] articles

enter image description here

если вы выполните шаги, описанные RedZagogulin, он должен работать для вас


Я постоянно сталкивался с этой проблемой, и это сводилось к тому, что у меня был следующий код в моем navbar:

<%= link_to "Blog", controller: 'articles' %>

я переключился на это и все начали работать:

<%= link_to "Blog", articles_path %>

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