【发布时间】:2018-05-06 15:03:38
【问题描述】:
我使用 form_for 创建了一个表单,它可以创建但不能更新这样的代码:
def create
@message=Message.new(message_params)
if @message.save
redirect_to root_path
else
render 'new'
end
end
def edit
@message=Message.find(params[:id])
end
def update
@message=Message.find(params[:id])
if @message.update(message_params)
redirect_to message_path(@message)
else
render 'edit'
end
end
我每一步都按照教程进行,他们可以做到,但我做不到。它总是显示:
No route matches [POST] "/message/4/edit"
我不知道为什么它不能直接更新路径? 谢谢
路线:
resources :message
表单视图:
<h1>Edit</h1>
<%= form_for :message do |a| %>
<p>
<%= a.label :name %><br>
<%= a.text_field :name %>
</p>
<p>
<%= a.label :description %><br>
<%= a.text_area :description %>
</p>
<%=a.submit "update"%>
<% end %>
【问题讨论】:
-
请添加 routes.rb 中的代码和您的表单代码
-
我的表格如上。一些教程说 Rails 将通过单击相同的提交按钮知道何时使用 post 或 patch。他们说如果rails在模型中找不到记录,它将使用“post”来创建;但是当它在模型中找到旧记录时,它会使用“patch or put”自动更新。是对的吗?谢谢。
-
@JuniorChung 在你的
routes.rb中是复数resources :messages -
@sovalina,这有关系吗?我不太确定,我以为它只是一个名字,它可以是任何名字,对吧?
-
@JuniorChung 如果您想将
message资源作为单数使用,请使用resource方法单数:resource :message。我与您分享answer here,它很好地解释了单数和复数资源之间的区别。混合命名资源单复数问题也解决了here
标签: ruby-on-rails-5 updates form-for