我正在写一个sinatra应用程序。我正在尝试编写一个页面来显示存储在数据库中的各个模式。使用datamapper我创建了一个类:
require 'dm-core'
require 'dm-migrations'
DataMapper.setup(:default, "sqlite://#{Dir.pwd}/development.db")
class Pattern
include DataMapper::Resource
property :id, Serial
property :patt, String
property :sentence, String
property :descript, Text
end
DataMapper.finalize
处理/ pattern /:id的路由是......
get '/pattern/:id' do
@patts = Pattern.get(params[:id])
erb :pattern
end
在我的pattern.erb文件中......
<div class="span10">
<h2><%= @patts.patt %></h2>
<p>Example: <%= @patts.sentence % @patts.patt %><p>
<p>Description: <%= @patts.descript %></p>
</div>
我得到的错误是......
NoMethodError at /pattern/1
undefined method `patt' for nil:NilClass
file: pattern.erb location: block in singleton class line: 6
我没有做什么或做错了什么?
答案 0 :(得分:0)
无论出于何种原因,@patts = Pattern.get(params[:id])
正在给你nil
最有可能的是,您传递的id
与现有的模式ID不匹配(因为没有模式,或者您的网址错误)。无论是什么原因,你都需要处理以下内容:
if @patt
# Your code
else
'No pattern by that id' # or something similar.
end
在您的控制器或.erb中。
答案 1 :(得分:-1)
这可能是因为你的桌子是空的。请先尝试在表格中插入记录。
您应该添加一些测试代码:
'/pattern/:id' do
puts params[:id]
@patts = Pattern.get(params[:id])
puts @patts
erb :pattern
end