Forum: Ruby on Rails Changing tables within rails app

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
unknown (Guest)
on 2006-01-03 20:00
(Received via mailing list)
Hi,

I want to know if my idea is possible within the rails framework.

I want to write a rails app that uses the same code to manage two
classes of widgets; "wired widgets" and "wireless widgets".

For the most part, all the code to manage these two classes of widgets
will be identical. The only differing part are some of the underlying
field names in each respective db table (table: wired_widgets vs.
wireless_widgets).

In an effort to reduce code repetition and take advantage of db table
reflection, I want to share the same code base and just change which
table is being used.

I envision a select menu in the app to toggle between the
'wired_widgets' and 'wireless_widgets' tables. And subsequently the
reflective view,edit,create pages would reflect the slightly differing
db fields.

Does anyone know of a clever way to do such a thing within rails?

Thank you for any help.

   Matt

--
Matt C. Wagner
Information Security Analyst

Network Intrusion Detection
Security Operations Center
Corporate Information Security
Wells Fargo Bank
Steven R. (Guest)
on 2006-01-03 20:00
(Received via mailing list)
Why not just make "wired" and "wireless" widgets properties of the
widget if
they contain the same info?

On 1/3/06, removed_email_address@domain.invalid 
<removed_email_address@domain.invalid>
wrote:
> field names in each respective db table (table: wired_widgets vs.
>
> Network Intrusion Detection
> Security Operations Center
> Corporate Information Security
> Wells Fargo Bank
>
> _______________________________________________
> Rails mailing list
> removed_email_address@domain.invalid
> http://lists.rubyonrails.org/mailman/listinfo/rails
>



--
Steven R.
web application & interface developer
http://www.zerium.com
[phone] 404-488-4364
Juraci Krohling C. (Guest)
on 2006-01-03 20:00
(Received via mailing list)
Hi Matt,

You can use the Single Table Inheritance pattern w/ this one:

Database: table "widgets" (w/ all wired and unwired fields, plus "type"
column)
Models: "WiredWidget < Widget", "UnwiredWidget < Widget" and "Widget <
ActiveRecord::Base"

Since STI has all fields for all "children" tables, your UnwiredWidget
model will have the same fields as WiredWidget ones. A quick-and-dirty
solution is to override the column_names method for ActiveRecord. So,
you can have something like this:

class Widget < ActiveRecord::Base

  def column_names
    ["some field", "other field", ...] if type == "WiredWidget"
    ["some unwired field", "other unwired field", ...] if type ==
"UnwiredWidget"
  end

end

--
juca
This topic is locked and can not be replied to.