非常に単純なレール3アプリケーションを設定して、レガシーMySQLデータベースのデータを表示します。レガシーデータベースは、主に外部キーフィールドが複数化されていることを除いて、ORM互換のレールです。たとえば、 "orders"テーブルには、 "companies_id"というよりむしろ "companies"というテーブルの外部キーフィールドがあります。だから自然に私は ":foreign_key"属性 "belongs_to"を使用して手動でフィールド名を設定する必要があります。未定義のメソッド `code 'for nil:レールとレガシーデータベースを含むNilClassメッセージ
私は数年の間にレールを使用していないが、私は右のすべてをやっているかなり確信している、まだ「order.currency.code」にアクセスしようとすると、私は次のエラーを取得する:
undefined method `code' for nil:NilClass
これはこれまでの非常に単純なアプリケーションです。私が行った唯一のことは、レガシーデータベーステーブルごとにアプリケーションと足場の束を生成することです。そして、モデルのいくつかに入って、上記のデータベース命名規則の違いに対応するための調整を行い、いくつかのフィールドをビューに追加しました。それでおしまい。面白いビジネスはありません。
だから私のデータベーステーブルは、この(唯一の関連分野)のようになります。
orders
------
id
description
invoice_number
currencies_id
currencies
----------
id
code
description
私の注文モデルは次のようになります。
class Currency < ActiveRecord::Base
has_many :orders
end
:
class Order < ActiveRecord::Base
belongs_to :currency, :foreign_key=>'currencies_id'
end
マイ通貨モデルは次のようになります
関連する表示スニペットは次のようになります。
<% @orders.each do |order| %>
<tr>
<td><%= order.description %></td>
<td><%= order.invoice_number %></td>
<td><%= order.currency.code %></td>
</tr>
<% end %>
私は完全にアイデアがありません。助言がありますか?
ああ、それは今私に戻ってきています。私は長年に渡ってレールを使い始めたとき、これらのヌルの問題に苦労していることを覚えています。どうもありがとうございました。それがそれでした。 –
あなたの語義は、その外部キーの必要性を無関係にしないでしょうか?また、おそらくorder.currency.blankを使用したいでしょうか?または逆order.currency.present?それを捕まえるか、2つ以上の属性を持たせて、その上にnilを指定するだけです。 – pjammer