我在名为dashboard的命名空间中有一个RESTful控制器,所以我的URL看起来像这样:
当我提交带有验证错误的成员表单时发生了一些奇怪的事情......它显示了错误,就像它想象的那样,但是当它转到PATCH url“/ dashboard / member”时它带有一个“.2 “最后:
“2”是记录的ID。
有趣的是,我做的一切都很正确而且效果很好,这个“.2”是唯一困扰我的东西。
我的控制器
class Dashboard::MembersController < ApplicationController
load_and_authorize_resource :class => Member
before_filter :authenticate_member!
def show
end
def edit
@member ||= current_member
end
def update
@member ||= current_member
if @member.update_attributes(member_params)
flash[:success] = "Profile updated"
redirect_to dashboard_member_path
else
render "edit"
end
end
private
def member_params
params.require(:member).permit(:first_name, :last_name, :address, :city, :state, :country, :zipcode, :home_phone, :cell_phone)
end
end
我的路线
namespace :dashboard do
resource :member, only: [:show, :edit, :update]
end
答案 0 :(得分:2)
如果您打算使用resource :member
(而不是resources :member
),那么您应该知道它总是在没有引用ID
的情况下查找。
以下是如何在没有id的情况下创建路线:
edit_dashboard_member GET /dashboard/member/edit(.:format) dashboard/members#edit
dashboard_member GET /dashboard/member(.:format) dashboard/members#show
PATCH /dashboard/member(.:format) dashboard/members#update
PUT /dashboard/member(.:format) dashboard/members#update
当您发送PATCH请求时,请确保您没有传递argument
。如果你传递一个参数,那么它将被解释为format(like .html, .js etc)
。在您的情况下,您传递的参数为2
或member with an id 2
例如:
对dashboard_member_path(2)的PATCH请求
该路线与PATCH /dashboard/member(.:format) dashboard/members#update
2被解释为(.:format)
,因为没有:id
部分。
答案 1 :(得分:0)
我不得不从我的表单中删除@member,所以...我有这个:
<%= form_for(@member, url: dashboard_member_path(@member), html: {method: "patch", class: "form-horizontal"}) do |f| %>
它变成了这个:
<%= form_for(@member, url: dashboard_member_path, html: {method: "patch", class: "form-horizontal"}) do |f| %>
现在,将ID传递给URL。
谢谢你们!