Today, I updated the ActiveRecord Code Generator a bit. I checked in changes to use primary and foreign key details from INFORMATION_SCHEMA. The original code used naming conventions to decide what various fields were used for - ID = Primary Key, Field_ID = Foreign Key to table Fields. If you want to use naming conventions, let me know and I can add a setting in App.Config to allow this (along with any "real" key constraints).
Recently, a reader saw my fix for SQL Server booleans, and asked me a followup question: why does Rails display a yes/no selection instead of a checkbox? The short answer is look in {RUBY_HOME} /lib/ruby/gems/1.8 /gems/actionpack-1.10.2 /lib/action_view/helpers, but your path may vary depending on whether you are using gem, "edge rails", etc. Anyway, look in the file "active_record_helper.rb" for a method called "all_input_tags", and notice that it calls "default_input_block" if you don't supply an input_block. Now notice that "default_input_block" creates a label and calls "input(record, column.name)" which in turn calls "InstanceTag#to_tag" which finally looks at the datatype and maps boolean to a select tag. Perhaps a wiser Rails explorer can provide us with the rationale for this, but I guess we could add a MixIn for InstanceTag that redefines the to_tag() method, or just do a dirty and unmaintainable hack l...
Comments
I am new to both NHibernate and ActiveRecord, so working throught these issues is taking me a while, but, I do intend to research all of them completely. If you would like, I would be glad to assist improving the tool.
BTW, I do really like the idea of removing plurals from the table names. I have not seen that feature in some other code generators for NHibernate.
I need to just read information on plural table / singular class from a file, and only fall back to my guess-work code if no entry is found. That will allow us to build a word list up, checked in to source control, and released with the app.
private ChangeContro _changeContro;
FYI, in my source version I added a "Browse..." button for the output folder.
private void btnBrowse_Click(object sender, EventArgs e)
{
System.Windows.Forms.FolderBrowserDialog dlg = new FolderBrowserDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
this.OutputDir = dlg.SelectedPath;
}
}