<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,25 @@
+class GeneratedAttribute &lt; Rails::Generator::GeneratedAttribute
+  def column_name
+    reference? ? &quot;#{name}_id&quot; : name
+  end
+
+  def field_type
+    @field_type ||= case type
+      when :references, :belong_to    then :collection_select
+      else
+        super
+    end
+  end
+
+  def field_parameters
+    if reference?
+      &quot;:#{column_name}, #{name.camelize}.all, :id, :to_s&quot;
+    else
+      &quot;:#{column_name}&quot;
+    end
+  end
+end
+
 class NiftyScaffoldGenerator &lt; Rails::Generator::Base
   attr_accessor :name, :attributes, :controller_actions
   
@@ -13,7 +35,7 @@ class NiftyScaffoldGenerator &lt; Rails::Generator::Base
       if arg == '!'
         options[:invert] = true
       elsif arg.include? ':'
-        @attributes &lt;&lt; Rails::Generator::GeneratedAttribute.new(*arg.split(&quot;:&quot;))
+        @attributes &lt;&lt; GeneratedAttribute.new(*arg.split(&quot;:&quot;))
       else
         @controller_actions &lt;&lt; arg
         @controller_actions &lt;&lt; 'create' if arg == 'new'
@@ -81,6 +103,16 @@ class NiftyScaffoldGenerator &lt; Rails::Generator::Base
         end
       
         m.route_resources plural_name
+        references.each do |ref|
+          look_for = &quot;map.resources :#{ref.name.pluralize}&quot;
+          m.gsub_file &quot;config/routes.rb&quot;,
+            /#{look_for}(?:, :has_many =&gt; \[\s*(.*)\])?$/,
+            &quot;#{look_for}, :has_many =&gt; [ :#{plural_name}, \\1]&quot;
+
+          m.gsub_file &quot;app/models/#{ref.name}.rb&quot;,
+            /#:Relationships$/,
+            &quot;\\&amp;\n  has_many :#{plural_name}&quot;
+        end
         
         if rspec?
           m.directory &quot;spec/controllers&quot;
@@ -124,6 +156,10 @@ class NiftyScaffoldGenerator &lt; Rails::Generator::Base
   def plural_class_name
     plural_name.camelize
   end
+
+  def references
+    @references ||= attributes.select { |a| a.reference? }
+  end
   
   def controller_methods(dir_name)
     controller_actions.map do |action|</diff>
      <filename>rails_generators/nifty_scaffold/nifty_scaffold_generator.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
   def index
-    @&lt;%= plural_name %&gt; = &lt;%= class_name %&gt;.scoped({})
+    @&lt;%= plural_name %&gt; = filter_model(&lt;%= references.map {|r| &quot;:#{r.column_name}&quot; }.join ', ' %&gt;)
 
     respond_to do |format|
       format.html # index.html.erb</diff>
      <filename>rails_generators/nifty_scaffold/templates/actions/index.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
   def new
-    @&lt;%= singular_name %&gt; = &lt;%= class_name %&gt;.new
+    @&lt;%= singular_name %&gt; = &lt;%= class_name %&gt;.new(&lt;%= references.map {|r| &quot;:#{r.column_name} =&gt; params[:#{r.column_name}]&quot; }.join ', ' %&gt;)
 
     respond_to do |format|
       format.html # new.html.erb</diff>
      <filename>rails_generators/nifty_scaffold/templates/actions/new.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,14 @@
 class &lt;%= plural_class_name %&gt;Controller &lt; ApplicationController
   &lt;%= controller_methods :actions %&gt;
+
+private
+  def filter_model *keys
+    result_set = &lt;%= class_name %&gt;.scoped({})
+    keys.each do |key|
+      if (value = params[key]).present?
+        result_set = result_set.scoped( :conditions =&gt; { key =&gt; params[key] } )
+      end
+    end
+    result_set
+  end
 end</diff>
      <filename>rails_generators/nifty_scaffold/templates/controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,12 @@
 class &lt;%= class_name %&gt; &lt; ActiveRecord::Base
-  attr_accessible &lt;%= attributes.map { |a| &quot;:#{a.name}&quot; }.join(&quot;, &quot;) %&gt;
+  attr_accessible &lt;%= attributes.map { |a| &quot;:#{a.column_name}&quot; }.join(&quot;, &quot;) %&gt;
+
+  #:Relationships
+  &lt;%- references.each do |a|-%&gt;
+  belongs_to :&lt;%= a.name %&gt;
+  &lt;%- end -%&gt;
+
+  def to_s
+    &quot;&lt;%= class_name %&gt; ##{id}&quot;
+  end
 end</diff>
      <filename>rails_generators/nifty_scaffold/templates/model.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,7 @@
 &lt;%- for attribute in attributes -%&gt;
   &lt;p&gt;
     &lt;%%= f.label :&lt;%= attribute.name %&gt; %&gt;&lt;br /&gt;
-    &lt;%%= f.&lt;%= attribute.field_type %&gt; :&lt;%= attribute.name %&gt; %&gt;
+    &lt;%%= f.&lt;%= attribute.field_type %&gt; &lt;%= attribute.field_parameters %&gt; %&gt;
   &lt;/p&gt;
 &lt;%- end -%&gt;
   &lt;p&gt;&lt;%%= f.submit &quot;Submit&quot; %&gt;&lt;/p&gt;</diff>
      <filename>rails_generators/nifty_scaffold/templates/views/erb/_form.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -9,7 +9,11 @@
   &lt;%% for &lt;%= singular_name %&gt; in @&lt;%= plural_name %&gt; %&gt;
     &lt;tr&gt;
     &lt;%- for attribute in attributes -%&gt;
+      &lt;%- if attribute.reference? -%&gt;
+      &lt;td&gt;&lt;%%=link_to &lt;%= singular_name %&gt;.&lt;%= attribute.name %&gt;, &lt;%= singular_name %&gt;.&lt;%= attribute.name %&gt; %&gt;&lt;/td&gt;
+      &lt;%- else -%&gt;
       &lt;td&gt;&lt;%%=h &lt;%= singular_name %&gt;.&lt;%= attribute.name %&gt; %&gt;&lt;/td&gt;
+      &lt;%- end -%&gt;
     &lt;%- end -%&gt;
     &lt;%- if action? :show -%&gt;
       &lt;td&gt;&lt;%%= link_to &quot;Show&quot;, &lt;%= singular_name %&gt; %&gt;&lt;/td&gt;</diff>
      <filename>rails_generators/nifty_scaffold/templates/views/erb/index.html.erb</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,11 @@
 &lt;%- for attribute in attributes -%&gt;
 &lt;p&gt;
   &lt;strong&gt;&lt;%= attribute.column.human_name.titleize %&gt;:&lt;/strong&gt;
+  &lt;%- if attribute.reference? -%&gt;
+  &lt;%%=link_to @&lt;%= singular_name %&gt;.&lt;%= attribute.name %&gt;, @&lt;%= singular_name %&gt;.&lt;%= attribute.name %&gt; %&gt;
+  &lt;%- else -%&gt;
   &lt;%%=h @&lt;%= singular_name %&gt;.&lt;%= attribute.name %&gt; %&gt;
+  &lt;%- end -%&gt;
 &lt;/p&gt;
 &lt;%- end -%&gt;
 </diff>
      <filename>rails_generators/nifty_scaffold/templates/views/erb/show.html.erb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>3fbe581b39f75f90a484205407152e347aceebb8</id>
    </parent>
  </parents>
  <author>
    <name>Jesus Lopez</name>
    <email>jesus@jesusla.com</email>
  </author>
  <url>http://github.com/jlopez/nifty-generators/commit/fa7a3575d5cb0fa5b294da6371b8fd9685f53b7f</url>
  <id>fa7a3575d5cb0fa5b294da6371b8fd9685f53b7f</id>
  <committed-date>2009-10-28T13:34:53-07:00</committed-date>
  <authored-date>2009-10-28T11:14:58-07:00</authored-date>
  <message>Improve support of :references attribute type

Will add belongs_to to generated model
Will add has_many to referenced model
Will add needed filters to generated controller (so parent/&lt;id&gt;/child works)
Will display links to parent model in views
Will use select_fields to edit parent affiliation</message>
  <tree>04df0416f4382592e9f71d75ca1cb5a3f6074126</tree>
  <committer>
    <name>Jesus Lopez</name>
    <email>jesus@jesusla.com</email>
  </committer>
</commit>
