<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -3,21 +3,22 @@
 /**
  * undocumented class
  *
- * @todo Add support for negative field inclusion rules
  * @package default
  * @access public
  */
-class ExpandableBehavior extends ModelBehavior {
+class ExpandableBehavior extends ModelBehavior{
 	var $settings = array();
 
 	function setup(&amp;$Model, $settings = array()) {
-		$default = array('schema' =&gt; $Model-&gt;schema());
+		$base = array('schema' =&gt; $Model-&gt;schema());
 		if (isset($settings['with'])) {
-			return $this-&gt;settings[$Model-&gt;alias] = am($default, $settings);
+			$conventions = array('foreignKey', $Model-&gt;hasMany[$settings['with']]['foreignKey']);
+			return $this-&gt;settings[$Model-&gt;alias] = am($base, $conventions, $settings);
 		}
 		foreach ($Model-&gt;hasMany as $assoc =&gt; $option) {
 			if (strpos($assoc, 'Field') !== false) {
-				return $this-&gt;settings[$Model-&gt;alias] = am($default, array('with' =&gt; $assoc), $settings);
+				$conventions = array('with' =&gt; $assoc, 'foreignKey' =&gt; $Model-&gt;hasMany[$assoc]['foreignKey']);
+				return $this-&gt;settings[$Model-&gt;alias] = am($base, $conventions, !empty($settings) ? $settings : array());
 			}
 		}
 	}
@@ -41,16 +42,18 @@ class ExpandableBehavior extends ModelBehavior {
 		$id = $Model-&gt;id;
 		foreach ($fields as $key =&gt; $val) {
 			$field = $Model-&gt;{$with}-&gt;find('first', array(
-				// refactor file_id
 				'fields' =&gt; array($with.'.id'),
-				'conditions' =&gt; array($with.'.file_id' =&gt; $id, $with.'.key' =&gt; $key),
+				'conditions' =&gt; array($with.'.'.$foreignKey =&gt; $id, $with.'.key' =&gt; $key),
 				'recursive' =&gt; -1,
 			));
+			$Model-&gt;{$with}-&gt;create(false);
 			if ($field) {
-				$Model-&gt;{$with}-&gt;create();
-				$Model-&gt;{$with}-&gt;id = $field[$with]['id'];
-				$Model-&gt;{$with}-&gt;save(array('val' =&gt; $val));
+				$Model-&gt;{$with}-&gt;set('id', $field[$with]['id']);
+			} else {
+				$Model-&gt;{$with}-&gt;set(array($foreignKey =&gt; $id, 'key' =&gt; $key));
 			}
+			$Model-&gt;{$with}-&gt;set('val', $val);
+			$Model-&gt;{$with}-&gt;save();
 		}
 	}
 }</diff>
      <filename>cakephp/behaviors/expandable/expandable.php</filename>
    </modified>
    <modified>
      <diff>@@ -25,7 +25,6 @@ class ContainableBehaviorTest extends CakeTestCase {
 
 	function testAfterFind() {
 		$r = $this-&gt;File-&gt;find('all');
-		var_export($r);
 		$this-&gt;assertTrue(Set::matches('/FileTestModel[1]/.[colors=255]', $r));
 		$this-&gt;assertTrue(Set::matches('/FileTestModel[1]/.[page_id=1]', $r));
 		$this-&gt;assertTrue(Set::matches('/FileTestModel[2]/.[comment=This is the Thumbnail version]', $r));</diff>
      <filename>cakephp/behaviors/expandable/expandable.test.php</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>735162b74eaa6096c0cc257e638b4c1767b7db37</id>
    </parent>
  </parents>
  <author>
    <name>Felix Geisend&#246;rfer</name>
    <email>felix@debuggable.com</email>
  </author>
  <url>http://github.com/felixge/debuggable-scraps/commit/54a06e9f7ce6b477c8b001a2ab9080b90a64e00b</url>
  <id>54a06e9f7ce6b477c8b001a2ab9080b90a64e00b</id>
  <committed-date>2008-11-04T11:53:21-08:00</committed-date>
  <authored-date>2008-11-04T11:52:05-08:00</authored-date>
  <message>Update expandable to latest version</message>
  <tree>10dc50092d14c972abddf4858ee258d3a561904a</tree>
  <committer>
    <name>Felix Geisend&#246;rfer</name>
    <email>felix@debuggable.com</email>
  </committer>
</commit>
