2012-02-29 49 views
0

我有一個管理用戶的Rails 3中的更新表單,儘管有驗證失敗,但無提示失敗。它以前工作,但是當我將所有內容移動到名稱空間時,它不再保存。更新失敗,命名空間模式

這裏是我的控制器相關代碼:

def update 
    @admin = Admin::Admin.find(params[:id]) 

    respond_to do |format| 
     if @admin.update_attributes(params[:admin]) 
      flash[:success] = "'#{@admin.name}' was successfully updated." 
      format.html { redirect_to admin_admins_path } 
     else 
      format.html { render action: "edit" } 
     end 
    end 
end 

和模型(未完,但以前工作):

class Admin::Admin < ActiveRecord::Base 
    validates :name, :presence=>{:message=>"Name can't be blank"} 
    validates :email, :presence=>{:message=>"Email can't be blank"}, 
     :length => {:minimum => 3, :maximum => 254, :message=>"Email must be between 3 and 254 characters"}, 
     :uniqueness=>{:message=>"Email has already been registered"}, 
     :format=>{:with=>/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :message=>"Email must be a valid email format"} 
    validates :password, :presence=>{:message=>"Password can't be blank"} 
end 

和窗體的部分第一部分:

<%= form_for(@admin) do |f| %> 

一切正常加載,但是當我嘗試保存時,我的驗證將被忽略並重定向到該索引頁面帶有成功消息,但不保存數據。我有一種感覺我錯過了與命名空間有關的事情,但我不完全確定問題是什麼。它可能在基礎模型目錄中查找模型嗎?

回答

1

你檢查了參數嗎?我可以想象params[:admin]不再包含表單值。

+0

這是正確的,它們是空白的。我認爲這是一個命名空間問題,因爲沒有驗證運行。 – VirtuosiMedia 2012-02-29 23:44:03

+0

驗證不會抱怨'@ admin.update_attributes(nil)'。 – iltempo 2012-02-29 23:45:41

+0

試着找出如何在params中使用Admin :: Admin模型。沒有測試它,但我可以想象像'params ['admin :: admin']。 – iltempo 2012-02-29 23:50:09

0

因此,我和VirtuosiMedia通過它,RoR添加了一個「admin_」來表示Admin ::命名空間,所以我們必須查找params [:admin_admin]。