O'Reillyの本の助けを借りて、SinatraとDataMapperを使用してURL短縮サービスのクローンを作成しています。短縮用のURLを送信してテストすると、このエラーが発生します
NoMethodError - undefined method `visits' for nil:NilClass:
31行目。Linkクラスにはvisitsプロパティがないようですが、以下のクラス定義からわかるように、この関係は、私が呼び出すことができるはずです。link.visits
最新バージョンのDataMapperを使用しています。誰かがこれの修正を提案できますか?
get '/:short_url' do
link = Link.first(:identifier => params[:short_url])
link.visits << Visit.create(:ip => get_remote_ip(env)) #this is line 32
link.save
redirect link.url.original, 301
end
クラス
Class Url
include DataMapper::Resource
property :id, Serial
property :original, String, :length => 255
belongs_to :link
end
class Link
include DataMapper::Resource
property :identifier, String, :key => true
property :created_at, DateTime
has 1, :url
has n, :visits
class Visit
include DataMapper::Resource
property :id, Serial
property :created_at, DateTime
property :ip, IPAddress
property :country, String
belongs_to :link
after :create, :set_country