Deep in Deep

プログラミング勉強中。遠回りですが、ゆっくり深く学んでいきたい。

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" %>

かなり泥臭い方法での実装となってしまったが、これでやりたいことはできた。もっといい解決策があれば取り入れていきたいです。

短いですけど、今回はこのくらいで!それではまた。