1

私はここからの情報をフォローしています:cfwheels.org/docs/1-1/chapter/nested-properties

同じ場所で故障するサンプルアプリケーションをダウンロードすることになりました

エラーが発生しないという意味で、コードは正常に実行されますが、多くのテーブルは新しいエントリを取得しません。データベースにエントリを手動で追加すると、チェックボックスに反映されず、場合によっては削除されます。モデルが更新されます。


編集

私は問題を見つけました...それを解決する方法ではありません。そこには、見逃しがちな小さなディテールがあります。アプリケーションは複合キーに依存しているようで、キーの順序が重要です。しかし、私は複合キーを使用していません。

(例としてhttps://github.com/mhenke/cfwheels-training/blob/develop/03-tags.mdをフォローしています...)

idcols: 、、、tagsidおよびが機能するテーブルを取得するにはどうすればよいcommentsidですか?

私が見ている問題は、cfwheelsがタグ付けモデルを作成するときにidタグを使用しようとし続けることです

4

1 に答える 1

1

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>

私はこれをテストしていませんが、多かれ少なかれ動作するはずです。ホイールヘルパーを使用するのは(すべきですか?)それほど単純ではありませんが、それほど悪くはないようです。

于 2011-11-26T22:42:21.100 に答える