2

我有一个正在编写的 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

我没有做或做错了什么?

4

2 回答 2

0

无论出于何种原因, 最有可能的是,@patts = Pattern.get(params[:id])您传递的与现有模式 id 不匹配(因为要么没有模式,要么你打错了 url)。无论是什么原因,您都需要通过以下方式来处理它:nilid

if @patt
  # Your code
else
  'No pattern by that id' # or something similar.
end

在您的控制器或您的 .erb 中。

于 2013-06-03T16:41:41.767 回答
-1

这可能是因为您的表是空的。尝试先在表中插入一条记录。

您应该添加一些这样的测试代码:

'/pattern/:id' do 

  puts params[:id] 

  @patts = Pattern.get(params[:id]) 

  puts @patts 

  erb :pattern 

end
于 2013-06-03T02:11:43.137 回答