1

一般来说,我是 CFWheels 和框架的新手。

我正在关注 Wheels 网站上的截屏视频:http: //cfwheels.org/screencasts/

我完全按照本教程进行操作......唯一的区别是,他的表被命名为“人”,而我的表被命名为“用户”。我进行了相应的更改,但其他一切都保持不变。

他的单数是“人”,我的是“用户”。

这是我的“User.cfc”控制器中的插入代码:

<cfcomponent extends="Controller" output="true">

    <cffunction name="register">

        <cfset user = model("user").new() />

    </cffunction>

    <cffunction name="create">

        <cfset params.user['userUUID'] = createUUID() />
        <cfset params.user['userCreated'] = createODBCDateTime(now()) />
        <cfset params.user['userModified'] = createODBCDateTime(now()) />

        <cfset user = model("user").new(params.user) />
        <cfset user.save() />

    </cffunction>

</cfcomponent>

现在,我也在我的视图中使用表单助手等,如下所示:

<cfparam name="user" />

<cfoutput>

#startFormTag( action="create" )#

<fieldset>

    <legend>Register</legend>

    #textField( label="User Name http://#cgi.server_name#/user/", objectName="user", property="userName" )#
    #textField( label="Email Address", objectName="user", property="userEmail" )#
    #textField( label="Password", objectName="user", property="userPassword" )#
    #submitTag( value="Register" )#

</fieldset>

#endFormTag()#

</cfoutput>

很简单吧?所以我不明白为什么它没有插入。它是否与命名我的 CFC“用户”以及将我的单数名称设置为“用户”的名为“用户”的表有关?

当我提交表单时,没有错误。它执行得很好,但是如果我查看数据库,什么都没有。

我想的一件事......是......究竟轮子是如何知道要寻找什么表的?对此似乎没有任何解释。也许它只是找到了错误的表?

非常感谢,迈克尔


解决了!

大家好,只是为可能遇到此问题的其他人提供的更新。没有发生任何事情的原因是因为我的数据库表要求某些字段不能为空。CFWheels 没有抛出任何错误。一旦我将值传递给这些字段就很好了;所以一定要检查一下!

希望有帮助。

4

2 回答 2

2

Michael,首先我建议您将控制器重命名为 Users.cfc(复数)。

在 Wheels(以及 Rails 和其他类似的配置框架约定)中,模型是单数的(User.cfc),而控制器和表是复数的(Users.cfc)。您的代码看起来都很可靠,唯一让我震惊的是您的控制器被标记为“User.cfc”。

我在创建/更新控制器方法中可能会做的一件事是这样的:

if (user.save()){
    flashInsert(success="The user was created successfully.");
    redirectTo(action="index");
} else {
    flashInsert(error="There was an error creating the user.");
    renderPage(action="new");
}

user.save() 将返回一个布尔值,如果出现问题并且保存失败,此条件允许您进行一些实际的错误处理/调查。

关于 Wheels 如何知道要查找什么表的问题,Wheels 按照惯例这样做了。[在这里解释它是如何工作的]它会检查您的模型,并且对于每个模型,它将检查您的数据库中是否存在复数版本。因此,如果有一个名为“User”的模型,那么 Wheels 将期望有一个名为“Users”的表。

于 2012-04-12T17:37:07.840 回答
1

迈克尔,

我对模型对象函数进行故障排除的第一步通常是转储结果 allErrors() 方法。尝试保存后立即添加此行。

<cfdump var=user.allErrors() label="User Save Errors" abort />

MC

于 2012-04-12T20:09:28.310 回答