Я делаю краткое упражнение, сжатое ниже. У меня проблема в том, что я могу передать выбор всех билетов, но не выбор одного билета. В / нет проблем с перечислением всех билетов, в конечной точке для билета, который я получаю:
NoMethodError at /pi2l9ulnw
undefined method `slug' for #<Enumerable::Enumerator:0x7f04eb043b88>
Я относительно новичок в Ruby и копировании и вставке, но кажется, что пропуск @ticket
для получения @ticket.slug
прямо из документации Синатры. Я дошел до этой точки и зашел в тупик, где я пытаюсь создать простую конечную точку для 1 билета. Любые предложения, пока я пытаюсь прочитать, что я делаю, спасибо.
Пример ниже сжат в 1 файл:
require 'rubygems'
require 'sinatra'
require 'haml'
require 'dm-core'
require 'dm-validations'
require 'dm-types'
require 'dm-migrations'
require 'sqlite3'
configure do
class Ticket
include DataMapper::Resource
property :id, Serial # unique key
property :slug, String # unique slug as endpoint
property :created_at, DateTime # created
property :content, Text # content of ticket
validates_uniqueness_of :slug
end
set :sessions , true
DataMapper::Logger.new($stdout, :debug)
DataMapper.setup( :default , "sqlite3://#{Dir.pwd}/development.sqlite3" )
DataMapper.finalize
DataMapper.auto_upgrade!
end
error do
e = request.env['sinatra.error']
Kernel.puts e.backtrace.join("\n")
'Application error'
end
helpers do
def sluggenerate
rand(2**256).to_s(36)[0..8]
end
end
get '/' do
@tickets = Ticket.all(:order => [ :created_at.desc ])
haml :index
end
get '/new' do
haml :new
end
post '/new' do
p params
@ticket = Ticket.new(:slug => sluggenerate,:content => params[:content])
if @ticket.save
redirect '/'
else
redirect '/new'
end
end
get '/:slug' do
@ticket=Ticket.find(params[:slug])
haml :ticket
end
__END__
@@ layout
%html
= yield
@@ new
%h1 NEW TICKET
%form{:action => '/new', :method => 'post'}
%p
%input{:type => "text", :name => "content", :id => "content" }
%input{:type => "submit", :value => "post"}
@@ index
%div{:class => "tickets"}
- @tickets.each do |ticket|
%div{:class => "ticket"}
%h2
%a{:href => "/#{ticket.slug}" }
= ticket.slug
%div{:class => "tickettime"}
= ticket.created_at
%div{:class => "ticketcontent"}
= ticket.content
@@ ticket
%div{:class => "ticket"}
= @ticket.slug