ERBでクラスの宣言がうまく出来なかった話
ERBを使っていて困ったこと
以前、生のRubyでWebアプリを作成する、「作りながら学ぶRuby入門 第2版」という本を読んでいたとき、データベースとの連携をActiveRecordを使用して行った。
RubyのファイルでActiveRecordを使用して、例えばbooksというテーブルのレコードを操作する場合、
class Book <ActiveRecord::Base end
のような宣言をしてから
book = Book.find(1)
という感じで、レコードを探したりしていた。
Webアプリを作成するにあたって、ERBというテンプレートエンジンを利用してhtml形式の中でRubyのコードを使う場面があった。
その際に、データベースに接続して操作することがあり、erbファイル内で上記のようなクラスの宣言をしようと思って
<% class Book < ActiveRecord::Base %> <% end %>
というような記述をした。そうすると、エラーがでてしまい、うまくクラスを読み込むことができず、データベースの操作がままならなかった。
解決策
このときは、上記のようなクラスの宣言の仕方ができないのなら、Book.rbのような別ファイルを作成し、
(Book.rb) class Book < ActiveRecord::Base end
それをERB側でrequire
する形で実装した。
(books_show.erb) <% require "<Book.rbのパス>/Book" %>
かなり泥臭い方法での実装となってしまったが、これでやりたいことはできた。もっといい解決策があれば取り入れていきたいです。
短いですけど、今回はこのくらいで!それではまた。