2011-07-06 8 views
0

로프를 배우려고 노력하는 간단한 Sinatra 앱이 있습니다. 간단한 양식이지만 데이터가 게시되지 않습니다. DataMapper를 사용하여 데이터베이스에 연결했지만 데이터가 게시되지 않습니다 (DB는 항목을 표시하지만 모두 비어 있음). 그렇지 않으면양식 데이터가 DataMapper DB에 게시되지 않음

require 'sinatra' 
require 'rubygems' 
require 'datamapper' 
require 'dm-core' 

DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/entries.db") 

class Entry 
include DataMapper::Resource 

property :id,   Serial 
property :first_name, String 
property :last_name, String 
property :email,  String 
property :created_at, DateTime  

end 

# create, upgrade, or migrate tables automatically 
DataMapper.auto_upgrade! 

# Set UTF-8 for outgoing 
before do 
headers "Content-Type" => "text/html; charset=utf-8" 
end 


get '/' do 
@title = "Enter to win a rad Timbuk2 bag!" 
erb :welcome 
end 

get '/entry' do 
end 

get '/list' do 
@title = "List of Entries" 
@entries = Entry.all(:order => [:created_at.desc]) 
erb :list 
end 

post '/create' do 
@entry = Entry.new(:first_name => params[:first_name], :last_name =>  params[:last_name], :email => params[:email]) 

if @entry.save 
    redirect("/thanks") 
else 
    redirect('/') 
end 
end 

get '/thanks' do 
erb :thanks 
end 

답변

1

HTML 양식 태그에 enctype을 설정하면 Sinatra가 POST를 읽을 수 없습니다. 이를 제거하면 매개 변수가 설정되어 Entry.new 호출로 전달됩니다. 명시 적으로 설정하려는 경우 (기본값과 동일한 값), 다음과 같습니다.

[...] 
<form action="/create" method="post" id="entry" enctype="application/x-www-form-urlencoded"> 
<p> 
    <label>First Name: </label><br /> 
[...] 
+0

정말 고마워요! 그게 전부 였어. 나는 (분명히) 내가 거기에서 무엇을하고 있는지 몰랐다. =] – YuKagi

0

@entry = Entry.new(:first_name => params['first_name'], :last_name => params['last_name'], :email => params['email']) 

을 시도해보십시오

<h1><%= @title %></h1> 

<form action="/create" method="post" id="entry" enctype="text/plain"> 
<p> 
<label>First Name: </label><br /> 
<input type="text" name="first_name" id="first_name" /> 
</p> 
<p> 
<label>Last Name: </label><br /> 
<input type="text" name="last_name" id="last_name" /> 
</p> 
<p> 
<label>Apple Email Address: </label><br /> 
<input type="text" name="email" id="email" /> 
</p> 
<p> 
<input type="submit"> 
</p> 

그리고 내시나 (분명히 불완전) 모든 핸들러 파일 : 여기

은 내 양식입니다 폼 빌더 나 리소스를 사용하면 params에 심볼이 생기지 않습니다.

+0

양식의 형식을 변경하면 문제가 해결됩니다. 나는 그대로 기호를 남기고 모든 것이 예상대로 작동합니다. 그것으로 판단하면 기호가 매개 변수에서 작동하는 것 같습니다. – YuKagi

관련 문제