2012-02-29 48 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]。