Dealing with legacy database views in rails

1k views Asked by At

I am new to ruby and rails and I am having difficulty conceptualizing the MVC techniques in conjunction with database views. I am dealing with a legacy database that has several viiews that are used to generate reports.

Where I get lost is how do I actually use a database view. Should it be put in a model? If so what exactly would that look like?

As an example the legacy db has a view called qryTranscriptByGroup. It is used in the legacy application in an SQL statement such as "SELECT * FROM qryTranscriptByGroup WHERE group='test_group'". This returns a small number of records usually less than 100.

If i create a model, Transcript, how would I define a method like Transcript.find_by_group(group)? As well, it would seem that I might need to prevent any other "find" methods as they would be invalid in this context.

There is also the the fact that the view is read-only and I would need to prevent any attempts to create, update or destroy it.

Perhaps I am going about this entirely the wrong way. The bottom line is that I need to get information from several tables (models?) that represent the information about a user (a transcript). Actually one or more users (transcripts plural).

-Thanks!

1

There are 1 answers

2
tommasop On BEST ANSWER

You can use a database view like a normal model.

In your case:

class Transcript < ActiveRecord::Base
  set_table_name "qryTranscriptByGroup"
  set_primary_key "if_not_id"
end

The query will be then:

Trascript.find_by_group('test_group')

without you need to declare anything.

Rails uses the method_missing method to magically generate find_by_column_name methods.

For the create/update/delete action you can simply delete them or not create them in the controller.