2011-07-06 13 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> 

そして、私のシナトラ(明らかに、不完全な)すべてのハンドラを持つファイル:ここで

は私のフォームですフォームビルダーやリソースを使用すると、シンボルにパラメータが含まれません。

+0

私のフォームのenctypeを変更すると問題が解決します。私はそれらのシンボルをそのまま残し、すべてが期待通りに機能します。そのことから判断すると、シンボルはパラ​​メタで動作するように見えます。 – YuKagi

関連する問題