0

我有一個叫儀表盤的命名空間內一個RESTful控制器,所以我的URL看起來像這樣:奇怪Rails的後4 RESTful的URL形式的錯誤

  • /儀表/會員
  • /儀表板/成員/編輯

當我提交帶有驗證錯誤的成員表單時,發生了一些奇怪的現象......它顯示了錯誤,但是當它進入PATCH URL「/ dashboard/member」時,它帶有一個「 .2「最後:

  • /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

也許你應該粘貼你的'routes.rb'和你的視圖文件來訪問這條路線。 – MurifoX

+0

更好地顯示你的控制器,重定向可能是錯誤的。 –

+0

請讓我們一些代碼..像你正在使用的路線和鏈接.. –

回答

2

如果你想用的(而不是resources :memberresource :member那麼你應該知道,它總是查找沒有引用一個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 

當你發送補丁請求確保你不將它傳遞一個argument。如果你傳遞一個參數,那麼它將被解釋爲format(like .html, .js etc)。在你的情況傳遞參數作爲2member with an id 2

對於如:

PATCH請求dashboard_member_path(2)

這條路線對PATCH /dashboard/member(.:format) dashboard/members#update

2匹配被解釋爲(.:format)因爲沒有:id部分。

+0

如何從此刪除ID?你能解決我的代碼嗎? –

+0

你從哪裏調用Patch請求?分享有問題的代碼。 –

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| %> 

現在,有被傳遞到IDS URL。

謝謝你們!

+0

這正是我在我的回答中告訴你的,要從調用PATCH請求中移除參數。由於您沒有分享特定的代碼,因此我無法確定位置。另外,你的原始問題是關於PATCH url結尾的「.2」,我的答案解決了這個查詢。您的回答可以解決評論中的問題。對於給定的問題不接受正確答案是錯誤的,並且在評論中張貼基於問題的答案是錯誤的。回答你浪費了我的努力和時間。 –