我有一张供人们捐款的表格。它需要电子邮件和名称。我还没有添加条带..只是尝试让表单首先工作并将他们的电子邮件/名称保存到数据库。
当我向模型添加状态验证时,它不会接受任何内容。它只返回f.error通知。当我摆脱验证时,表单成功提交但没有任何内容保存到数据库。 rails控制台只返回名称和电子邮件的nil。
对于rails来说还是新手,所以可能很简单。任何建议都很棒。
donation.rb
(型号):
class Donation < ActiveRecord::Base
attr_accessor :name, :email
validates :name,
presence: true
validates :email,
presence: true
end
donations_controller:
class DonationsController < ApplicationController
def new
@donation = Donation.new
end
def create
@donation = Donation.new(params[donation_params])
if @donation.valid?
redirect_to root_path, notice: "Thank you. We have received your donation."
else
flash[:alert] = "An error occurred, please try again."
render :new
end
end
private
def donation_params
params.require(:donation).permit(:name, :email)
end
end
routes.rb中:
get 'donations', to: 'donations#new', as: 'donations'
post 'donations', to: 'donations#create'
new.html.erb(捐款视图):
<body class ="CU">
<div class="authform">
<%= simple_form_for @donation, :url => donations_path do |f| %>
<h1 style = "text-align:center; color:black;">Donate</h1>
<%= f.error_notification %>
<div class="form-group">
<%= f.text_field :name, placeholder: 'Name', :autofocus => true, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.text_field :email, placeholder: 'Email', class: 'form-control' %>
</div>
<%= f.submit 'Donate', :class => 'btn btn-lg btn-danger btn-block' %>
<% end %>
</div>
</body>
如果您还有其他需要,请告诉我。感谢你们。
答案 0 :(得分:3)
这部分
@donation = Donation.new(params[donation_params])
实际应该是:
@donation = Donation.new(donation_params)
此外,您的创建方法不会保存记录。使用save
代替valid?
为什么你在验证定义中加入了breakline?
此外,使用RESTful路由,即:
resources :donations
而不是手动定义每条路线。
此外,由于您使用的是strong params,因此您不需要attr_accessor
(这应该是attr_accessible
只有rails的情况,但无论如何)。
您可以使用attr_accessor
来定义虚拟属性,但我确信不是这种情况,因为name
和email
是数据库支持的字段。
最后,只需浏览Rails guides - 您就会找到所有需要的信息。
答案 1 :(得分:0)
因为您没有保存,请在if @donation.save
if @donation.valid?
代替create