RAILS如何使用CRUD系统更新?

How to update with CRUD system in RAILS?

我正在学习 Rails 并且正在尝试使用 CRUD 系统。 我想在单击 "Edit" 按钮时更新我的​​文章。 问题,我得到这个错误 "ActionController::RoutingError (No route matches [POST] "/articles/1/edit"):"

我使用 "resources :articles" 在我的 routes.rb 文件中为 CRUD 系统创建了所有路由。

这是我的路线:

edit_article GET    /articles/:id/edit(.:format)  articles#edit                                                       

             PATCH  /articles/:id(.:format)       articles#update                                                             

             PUT    /articles/:id(.:format)       articles#update                                                           

这是我的表格:

<%= form_with do %>
  <div class="form-group">
    <label>Titre de l'article</label>
    <%= text_field :title, '', class:'form-control' %>
  </div>
  <div class="form-group">
    <label>Contenu de l'article</label>
    <%= text_area :content, '', class:'form-control'%>
  </div>
  <div class="form-group">
    <button type="submit" class="btn btn-primary">Modifier l'article</button>
  </div>
<% end %>

我认为这与我们使用 :resource.

时 PATCH/PUT 中更新操作的 HTTP 协议有关

Link 我用于执行此操作的文档:https://guides.rubyonrails.org/routing.html#crud-verbs-and-actions

感谢您的帮助!

试试这个你需要通过表单提交给控制器操作

<%= form_for @artice, url: {action: :update} do |f| %>
  <div class="form-group">
    <label>Titre de l'article</label>
    <%= text_field :title, '', class:'form-control' %>
  </div>
  <div class="form-group">
     <label>Contenu de l'article</label>
     <%= text_area :content, '', class:'form-control'%>
  </div>
 <div class="form-group">
    <button type="submit" class="btn btn-primary">Modifier l'article</button>
 </div>
<% end %>

form_with将取代以后贬值的form_tagform_for,因为它结合了这两个帮手。

在你的表单中,你忘记了你的对象,所以表单无法知道应该更新什么。

form_with do 替换为 form_with model: @article do 应该可以解决问题

<%= form_with model: @article do %>
  <div class="form-group">
    <label>Titre de l'article</label>
    <%= text_field :title, '', class:'form-control' %>
  </div>
  <div class="form-group">
    <label>Contenu de l'article</label>
    <%= text_area :content, '', class:'form-control'%>
  </div>
  <div class="form-group">
    <button type="submit" class="btn btn-primary">Modifier l'article</button>
  </div>
<% end %>

试试这个:

<%= form_with model: @article do |t| %>
  <div class="form-group">
    <label>Titre de l'article</label>
    <%= t.text_field :title, class:'form-control' %>
  </div>
  <div class="form-group">
    <label>Contenu de l'article</label>
    <%= t.text_area :content, class:'form-control'%>
  </div>
  <div class="form-group">
    <%= t.submit "Modifier l'article", class: "btn btn-primary" %>
  </div>
<% end %>