首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将数据保存到模型中

无法将数据保存到模型中
EN

Stack Overflow用户
提问于 2016-10-13 01:54:50
回答 2查看 67关注 0票数 0

我无法将数据保存到我的模型中。每次代码运行时,它都会遇到else语句,该语句无法保存CREATE操作中的数据。有什么想法吗?

这是我的invoices_controller.rb

类InvoicesController < ApplicationController

代码语言:javascript
复制
  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
end

Invoices/new.html.erb (这是我想要保存的数据)

代码语言:javascript
复制
<% 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

代码语言:javascript
复制
class Invoice < ApplicationRecord
  belongs_to :user
  has_one :receipt
  belongs_to :permit
end

Permit.rb

代码语言:javascript
复制
class Permit < ApplicationRecord
  belongs_to :user
  has_one :invoice

end
EN

回答 2

Stack Overflow用户

发布于 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

这应该可以帮助您找到错误。

票数 2
EN

Stack Overflow用户

发布于 2016-10-13 02:18:53

来自:build method on ruby on rails

build不会在数据库中“创建”记录,只是在内存中创建一个新对象,以便视图可以接受该对象并显示某些内容,特别是对于表单。

因此,构建无法工作,因为您没有创建(创建和保存)一条记录。build不保存记录。

尝试:

代码语言:javascript
复制
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
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40005254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档