【问题标题】:Update fails with namespaced model命名空间模型更新失败
【发布时间】:2012-02-29 22:32:31
【问题描述】:

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

一切都正确加载,但是当我尝试保存时,我的验证被忽略,它重定向到带有成功消息的索引页面,但没有保存数据。我有一种感觉,我错过了与命名空间有关的东西,但我不完全确定问题出在哪里。会不会是在基础模型目录中寻找模型?

【问题讨论】:

    标签: ruby-on-rails model namespaces


    【解决方案1】:

    你检查过参数吗?我可以想象params[:admin] 不再包含表单值。

    【讨论】:

    • 没错,它们是空白的。我认为这是一个命名空间问题,因为没有运行验证。
    • 验证不会抱怨@admin.update_attributes(nil)
    • 尝试找出 Admin::Admin 模型是如何在 params 中使用的。没有测试它,但我可以想象类似 `params['admin::admin'] 的东西。
    • 关闭:params[admin_admin] 终于奏效了。感谢您的帮助。
    【解决方案2】:

    所以,我和 VirtuosiMedia 逐步完成了它,并且 RoR 添加了一个“admin_”来表示 Admin:: 命名空间,所以我们不得不寻找 params[:admin_admin]。

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多