Данные формы не публикуются в БД DataMapper - PullRequest
0 голосов
/ 06 июля 2011

У меня есть простое приложение Sinatra, с которым я играю, пытаясь выучить веревки. У меня простая форма, но данные не публикуются. Я использую DataMapper для подключения к базе данных, но данные не публикуются (в БД отображаются записи, но все они пустые).

Вот моя форма:

<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>

И мой файл Синатры со всеми обработчиками (очевидно, неполный):

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

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Установка enctype в вашем HTML-теге формы не позволяет Синатре читать POST.Если вы удалите это, параметры будут установлены и, следовательно, переданы в вызов Entry.new.Если вы хотите явно установить его (на то же значение, что и по умолчанию), то это:

[...]
<form action="/create" method="post" id="entry" enctype="application/x-www-form-urlencoded">
<p>
  <label>First Name: </label><br />
[...]
0 голосов
/ 06 июля 2011

Попробуйте

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

Если вы не используете построители форм или ресурсы, вы не получите символы в параметрах.

...