我无法将数据保存到我的模型中。每次代码运行时,它都会遇到else语句,该语句无法保存CREATE操作中的数据。有什么想法吗?
这是我的invoices_controller.rb
类InvoicesController < ApplicationController
def new
@permits = Permit.find(params[:permit_id])
@invoice = Invoice.new
end
def create
@permit = Permit.find(params[:permit_id])
@invoice = @permit.build_invoice(invoice_params)
if @invoice.save
redirect_to payment_path
else
redirect_to root_path
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_invoice
@invoice = Invoice.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def invoice_params
params.require(:invoice).permit(:vehicle_type, :name, :department, :carplate, :duration, :permitstart, :permitend, :price, :time)
end
endInvoices/new.html.erb (这是我想要保存的数据)
<% provide(:title, 'Invoice') %>
<h1>Invoice</h1>
<div class="row">
<div class="col-md-6 col-md-offset-3" id="datashow">
<%= form_for(@invoice) do |f| %>
<h2>Time : <%=@permits.created_at%></h2></br>
<h2>Invoice ID : <%=@permits.id%></h2></br>
<%= f.label :"Vehicle" %>
<%= f.text_field :vehicle_type, :value => @permits.vehicle_type, readonly: true %>
<%= f.label :"License Plate" %>
<%= f.text_field :carplate, :value => @permits.carplate, readonly: true %>
<%= f.label :"Student ID" %>
<%= f.text_field :studentid, :value => @permits.studentid, readonly: true %>
<%= f.label :name %>
<%= f.text_field :name, :value => @permits.name, readonly: true %>
<%= f.label :"Department of applicant" %>
<%= f.text_field :department, :value => @permits.department, readonly: true %>
<%= f.label :permit_start %>
<%= f.text_field :permitstart, :value => @permits.permitstart, readonly: true %>
<%= f.label :permit_end %>
<%= f.text_field :permitend, :value => @permits.permitend, readonly: true %>
<%= f.label :"Price" %>
<%= (f.text_field :price, :value => '$AUD 50' , readonly: true) %>
<%= hidden_field_tag(:permit_id, @permits.id) %>
<%= f.submit "Make Payment", class: "btn btn-primary" %>
<% end %>
</div>
</div>Invoice.rb
class Invoice < ApplicationRecord
belongs_to :user
has_one :receipt
belongs_to :permit
endPermit.rb
class Permit < ApplicationRecord
belongs_to :user
has_one :invoice
end发布于 2016-10-13 02:07:34
如果不确定未创建对象的原因,则有多个选择。首先,您可以在调试期间使用@invoice.save!而不是@invoice.save。这将引发一个异常,并给你一些线索,哪里出了问题。
或者,您可以使用调试器并检查@invoice.errors.full_messages。
此外,您还可以通过Rails.logger.error @invoice.errors.full_messages.to_sentence输出@invoice.errors.full_messages。
或者,您可以将错误消息用作闪存消息flash[:error] = @item.errors.full_messages.to_sentence
这应该可以帮助您找到错误。
发布于 2016-10-13 02:18:53
来自:build method on ruby on rails
build不会在数据库中“创建”记录,只是在内存中创建一个新对象,以便视图可以接受该对象并显示某些内容,特别是对于表单。
因此,构建无法工作,因为您没有创建(创建和保存)一条记录。build不保存记录。
尝试:
def create
@permit = Permit.find(params[:permit_id])
@invoice = @permit.invoices.create(invoice_params)
if @invoice.save
redirect_to payment_path
else
redirect_to root_path
end
endhttps://stackoverflow.com/questions/40005254
复制相似问题