模型验证导致错误Rails 4

时间:2015-04-17 06:31:06

标签: ruby-on-rails validation ruby-on-rails-4 model controller

我有一张供人们捐款的表格。它需要电子邮件和名称。我还没有添加条带..只是尝试让表单首先工作并将他们的电子邮件/名称保存到数据库。

当我向模型添加状态验证时,它不会接受任何内容。它只返回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>

如果您还有其他需要,请告诉我。感谢你们。

2 个答案:

答案 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来定义虚拟属性,但我确信不是这种情况,因为nameemail是数据库支持的字段。

最后,只需浏览Rails guides - 您就会找到所有需要的信息。

答案 1 :(得分:0)

因为您没有保存,请在if @donation.save

中尝试使用此if @donation.valid?代替create