【问题标题】:Model validations causing error Rails 4模型验证导致错误 Rails 4
【发布时间】:2015-04-17 06:31:05
【问题描述】:

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

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

如果您还需要什么,请告诉我。谢谢你们。

【问题讨论】:

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


    【解决方案1】:

    这部分

    @donation = Donation.new(params[donation_params])
    

    实际上应该是:

    @donation = Donation.new(donation_params)
    

    您的创建方法也不会保存记录。使用save 而不是valid?

    另外你为什么在你的验证定义中加入断线?

    另外,使用 RESTful 路由,即:

    resources :donations
    

    而不是手动定义每条路线。

    此外,由于您使用strong params,因此您不需要attr_accessor(应该是attr_accessible 它是rails 的情况,但无论如何)。 您可以使用attr_accessor 来定义虚拟属性,但我确信情况并非如此,因为nameemail 是数据库支持的字段。

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

    【讨论】:

    • @Kathan 也不需要 attr_accessor :name, :email
    • 感谢您的快速回复。当我使用resources :donations 而不是手动定义路线时,我收到此错误:The action 'index' could not be found for DonationsController 但是,我更改了其他所有内容并且它可以工作:D
    • 太棒了。最后一件事.. 当我使用 save? 而不是 valid? 时,我收到错误 undefined method save?'` 对于这些问题,我深表歉意。我肯定要完全通过rails guide。我整天都被困在这上面。谢谢。
    • @Kathan 我的错,save 没有 ?
    【解决方案2】:

    因为你没有保存它,所以试试这个if @donation.save而不是create中的if @donation.valid?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多