我一直在跟踪来自这里的信息: cfwheels.org/docs/1-1/chapter/nested-properties
最后我下载了一个样本应用,它在同一个地方崩溃
代码执行得很好,因为我没有错误,但许多表没有得到新的条目,当我在数据库中手动添加条目时,它们不会在复选框中反映出来,有时在更新模型时会删除它们。
编辑
我发现了问题..。只是不知道该怎么解决。有一个很容易被忽略的小细节。应用程序似乎依赖于复合键,键的顺序很重要。但我不使用合成钥匙。
(以https://github.com/mhenke/cfwheels-training/blob/develop/03-tags.md为例)
我如何得到一个有科尔的桌子:id,tagsid和commentsid?
我看到的问题是,在创建taggings模型时,cf轮子一直试图使用id标记。
发布于 2011-11-26 22:42:21
虽然我非常喜欢CFWheels,但我不得不承认,我不是表单助手函数或“快捷”功能的粉丝。在本例中,我只需“还原”到更简单/更简单的CFML,以构造复选框(如果不是整个表单)和循环逻辑,以保存联接表中的值。例如:
<fieldset>
<legend>PropertyLanguages</legend>
<cfloop query="Languages">
<label>
#Languages.language#
<input type="checkbox" name="Property[PropertyLanguages]" value="#Languages.id#">
</label>
</cfloop>
</fieldset>然后更改更新控制器逻辑如下:
<!--- CONTROLLER - update.cfm - updateProperty --->
<cffunction name="updateProperty">
<cfscript>
Property = model("Property").findByKey(key=params.Property.id);
Property.update(params.Property);
if (IsDefined("params.Property.PropertyLanguages"))
{
model("PropertyLanguages").deleteAll(where="propertyid=#params.Property.id# AND languageid NOT IN (#params.Property.PropertyLanguages#)");
for (var i = 1; i<=ListLen(params.Property.PropertyLanguages); i++)
{
languageid = ListGetAt(params.Property.PropertyLanguages, i);
if (! IsObject(model("PropertyLanguages").findOne(where="propertyid=#params.Property.id# AND languageid=#languageid#")))
{
pl = model("PropertyLanguages").new();
pl.langugageid = languageid;
pl.propertyid = params.Property.id;
pl.save();
}
}
}
else
{
model("PropertyLanguages").deleteAll(where="propertyid=#params.Property.id#");
}
</cfscript>
</cffunction>我还没有测试过这个,但它应该会起作用的,或多或少。它不是那么简单(应该吗?)正在使用车轮帮手,但看起来不算太糟。
https://stackoverflow.com/questions/8275830
复制相似问题