NoMethodError,在sinatra中调用属性

时间:2013-06-02 21:37:26

标签: ruby sinatra nomethoderror

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

我没有做什么或做错了什么?

2 个答案:

答案 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