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_tag
和form_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 %>
我正在学习 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_tag
和form_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 %>