1

我正在尝试从 Sinatra 中的路径获取数据,并使用 Datamapper 使用它来查找特定记录。Datamapper文档 似乎表明了这一点。

get "/test/:test_path" do
    test_get = Intake.get( params[:test_path] )
    # Do stuff
    erb :blah_blah_blah
end

应该找到与符号关联的任何记录:test_path

这不起作用。test_get 为零。

同时,起作用的是

get "/test/:test_path" do
    test_all = Intake.all(:test_path => params[:test_path] )
    # Do stuff
    erb :blah_blah
end

我的两个问题是:

  1. Datamapper 中的 .get() 调用我做错了什么?
  2. .all(:name => value) 方法是否比 .get() 慢,或者我使用哪个无关紧要?

这是一个简化的 Sinatra 脚本以演示该行为。

#!/usr/bin/env ruby

require 'rubygems'
require 'sinatra'
require 'dm-core'
require 'dm-timestamps'

DataMapper.setup(:default, {:adapter => 'yaml', :path => 'db'})

class Intake
  include DataMapper::Resource

  property :id,         Serial
  property :created_at, DateTime
  property :test_path,  String
end

get "/test/:test_path" do

  test_all = Intake.all(:test_path => params[:test_path] )
  puts 'test_all:' test_all.inspect

  test_get = Intake.get( params[:test_path] )
  puts 'test_get:' test_get.inspect

  "Hello World!"
end
4

1 回答 1

1

#get仅基于主键进行查找,其中id. 所以

Intake.get(params[:test_path])

寻找带有 id 的东西params[:test_path],这将失败。利用

Intake.first(test_path: params[:test_path])
于 2012-12-28T05:31:37.247 回答