Sinatra のパスからデータを取得し、それを使用して Datamapper を使用して特定のレコードを検索しようとしています。Datamapper docs はそれを示しているようです。
get "/test/:test_path" do
test_get = Intake.get( params[:test_path] )
# Do stuff
erb :blah_blah_blah
end
シンボル に関連付けられたすべてのレコードを検索する必要があります。test_path
これは動作しません。test_get は nil になります。
一方、機能するのは
get "/test/:test_path" do
test_all = Intake.all(:test_path => params[:test_path] )
# Do stuff
erb :blah_blah
end
私の2つの質問は次のとおりです。
- Datamapper の .get() 呼び出しで何が間違っていますか?
- .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