【问题标题】:Form Data is not getting posted to DataMapper DB表单数据未发布到 DataMapper DB
【发布时间】:2011-07-06 05:32:13
【问题描述】:

我正在玩一个简单的 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>

还有我的 Sinatra 文件以及所有处理程序(显然不完整):

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

【问题讨论】:

    标签: ruby sinatra datamapper


    【解决方案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 />
    [...]
    

    【讨论】:

    • 非常感谢!就是这样。我(显然)不知道我在那里做什么。 =]
    【解决方案2】:

    试试

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

    如果您不使用表单构建器或资源,则不会在参数中获得符号。

    【讨论】:

    • 更改我的表单上的 enctype 解决了这个问题。我将符号保留原样,一切都按预期工作。由此看来,符号似乎确实在参数中起作用。
    猜你喜欢
    • 2013-12-03
    • 2015-10-10
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多