0

試圖重寫我的配置文件控制器到目前爲止已被打破。使用friendly_id林有像諧音edit_basics.haml,edit_details.haml等下面的網址新手:與更新/重定向配置文件和friendly_id問題

  • /用戶/我/編輯/基礎
  • /用戶/我/編輯/利益
  • /用戶/ me/edit/details

問題是在更新我的配置文件並在更新後重定向到正確的路徑。 我已搜索並嘗試了幾件事情迄今無濟於事。

  • 提交編輯表格後,將其重定向到/型材/我
  • 更新/用戶/我/編輯/基礎知識後,它應該返回到這個位置 的更新拋出

    未定義的方法錯誤`的update_attributes'爲#<#:0x007f876e77d768>

    { 「UTF8」=> 「✓」, 「_method」=> 「放」, 「authenticity_token」=> 「wqDebPGdHvXszFvXcaeWwRewA6puTVlv5iCXX1ZD3KU =」 「簡檔」=> { 「形式」=> 「基本」, 「描述」=> 「」}, 「提交」=> 「保存」, 「ID」=> 「名爲myUsername」}

    Ofcourse ID不能是用戶名

路線

match '/users/:username' => "profiles#show" 
    match '/users/:username/edit/:what' => "profiles#edit", :as => :edit_user 

更新操作:

def update 

    @profile = Profile.where(params[:id]) 

    respond_to do |format| 
     if @profile.update_attributes(params[:profile]) 
     format.html { redirect_to @profile, :action => "edit", :what => @profile.form, notice: 'Profile was correctly updated.' } 
     else 
     format.html { @profile, :action => "edit", :what => @profile.form } 
     end 
    end 
    end 

編輯操作:

def edit 

@profile = Profile.find(params[:username]) 
what = params[:what] 

if not what.nil? 
    if ["basics", "location", "details", "photos", "interests"].member?(what) 
    render :action => "edit_#{what}" 
    else 
    render :action => "edit_basics" 
    end 
end 

UPDATE: 似乎id屬性始終包含用戶的用戶名,因此無法更新

+0

我認爲id是好的 - 那就是friendly_id的工作方式。 ID取決於slug列。在更新操作中,嘗試使用find(Profile.find(params [:id])) – zachar 2012-02-29 10:39:25

+0

不確定,但我認爲問題的一部分來自更新操作中的'Profile.where(params [:id])''。這將返回一個關係,而不是記錄。額外的提示:使用'除非'而不是'如果不是',它更紅寶石,爭論更清楚。 – 2012-02-29 11:00:32

+0

@_x我對「if not」語句的想法是一樣的。 而且我會補充說你可以做一些類似'match'/ users /:username/edit(/:what)'=>「profiles#edit」,:defaults => {:what =>「basic」} ,:as =>:edit_user'來允許正常的寧靜風格的網址,而仍然適應更多的解釋性網址。 – Ekampp 2012-02-29 12:39:06

回答

1

嘗試更新該行:

@profile = Profile.where(params[:id]) 

在你的控制器中,看看是否有幫助:

@profile = Profile.where({ :id => params[:id] }).first 

這將返回配置文件的實例,而不是條件。

希望它有幫助。

\\ Emil

+2

更好地使用'@profile = Profile.find(params [:id])'+如果不是what.nil?'的小重構,可以在這裏找到... https://gist.github.com/ 1964911 - 可能只是一個首選項,但'.present?'被定義爲'!blank?',它同時檢查'.nil?'和'.empty?' – 2012-03-03 07:43:25