尝试设置编辑表单时,我在rails应用中遇到错误:
ActionController::RoutingError (No route matches [PATCH] "/contact.5")
当我在编辑视图中检查我的表单时,我发现操作也是错误的
<form class="edit_contact" id="edit_contact_5" action="/contact.5" ...
我在我的联系人控制器的路线文件中创建了一个完整的资源:
resources :contacts
当我rake routes
时,我会收到以下联系人:
contact GET /contact(.:format) static_pages#contact
contacts GET /contacts(.:format) contacts#index
POST /contacts(.:format) contacts#create
new_contact GET /contacts/new(.:format) contacts#new
edit_contact GET /contacts/:id/edit(.:format) contacts#edit
GET /contacts/:id(.:format) contacts#show
PATCH /contacts/:id(.:format) contacts#update
PUT /contacts/:id(.:format) contacts#update
DELETE /contacts/:id(.:format) contacts#destroy
我有一个共享表单,用于在app / views / shared / _contact_form.html.erb中创建和编辑联系人。此表单正确显示新操作和编辑操作。此表单正在正确保存新联系人,但在尝试更新联系人时会抛出上述错误。
<%= form_for(@contact) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>
...
<%= f.submit yield(:button_text), class: "btn btn-primary" %>
<% end %>
我的编辑视图调用了这样的部分:
<% provide(:title, 'Edit Contact') %>
<% provide(:button_text, 'Update Contact') %>
<h1>Update <%= @contact.name =%></h1>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= render 'shared/contact_form' %>
</div>
</div>
以下是控制器中的编辑和更新操作:
def edit
@contact = Contact.find(params[:id])
end
def update
@contact = Contact.find(params[:id])
if @contact.update_attributes(contact_params)
flash[:success] = "Contact Updated"
redirect_to current_user
else
render 'edit'
end
end
我正在使用相同的模式来创建和更新我的用户,它似乎工作得很好。这似乎应该是非常直接的。任何人都可以帮我发现我的错误吗?
答案 0 :(得分:2)
啊,是的,在routes.rb。
中存在冲突 result.setVisibility(View.GONE);
所做的相当于:
form_for(@contact)
[1] http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for
根据屏幕截图,您列出了单一form_for @contact, as: :contact, url: contact_path(@contact), method: :patch, html: { class: "edit_contact", id: "edit_contact_45" }
路由,它看起来优先于contact => static_pages#contact
资源路径,特别是为contacts
操作生成的路径。< / p>
如果您删除或修改update
路线与static_pages#contact
路线不冲突,则您的编辑/更新表单应该有效。