Railsでモデル名にRubyのキーワードっぽいのを使うと面倒
モデルの名称にうっかりRubyのキーワードを使ってしまうとそのままでは動かなくなる場合があるので、注意です。
試しに、Aliasという名前の単純なモデルでscaffoldを作ってみます。
rails g scaffold alias name:string
で、localhost:3000/aliases/にアクセスし、AliasesControllerのindexメソッドを呼び出します。
SyntaxError in Aliases#index Showing /Users/suginoyasuhiro/work/sample/app/views/aliases/index.html.erb where line #11 raised: /Users/suginoyasuhiro/work/sample/app/views/aliases/index.html.erb:11: syntax error, unexpected keyword_alias, expecting '|' ');@output_buffer.append_if_string= @aliases.each do |alias| ^ /Users/suginoyasuhiro/work/sample/app/views/aliases/index.html.erb:13: syntax error, unexpected '.' ...@output_buffer.append= ( alias.name );@output_buffer.safe_co... ... ^ /Users/suginoyasuhiro/work/sample/app/views/aliases/index.html.erb:14: syntax error, unexpected keyword_alias, expecting ')' (以下略)
見事にビューのエラーが出ました。どうやら、ブロックで変数名がaliasとなっているのがいけないようです。
<% @aliases.each do |alias| %>
なので、aliasからaという変数名に書き換えて再度アクセスしてみると、
ちゃんと表示されました。New/Edit/Destroyはviewのテンプレートを修正せずに動作しました。こちらは@付きの変数で書かれているからのようです。
<p> <b>Name:</b> <%= @alias.name %> </p>
Railsの場合、テーブル名に合わせてテーブル名の単数形にするのが一般的で読みやすいと思うので、モデルの名称をキーワードと同じのにしようとこだわると色々めんどうになりそうですね。今回はscaffoldだけで試しましたが、それ以外のところでも何が起こるやら。