更新Postgres.app并重新创建数据库后无法创建和更新记录

时间:2015-05-25 17:39:27

标签: ruby-on-rails

我是使用rails noobie上的红宝石,并将postgress app升级到9.4.2(从9.3.5)和ruby到2.2.2(从2.2.1)。更新后,我不得不重新创建并从新的迁移数据库。

我无法在整个应用程序中创建和更新任何记录(即所有控制器/视图)。以前曾经工作过。我得到的输出是:

Started GET "/expense_claims/new?utf8=%E2%9C%93&authenticity_token=iVEJfsXCoIKdngHRe6Zviqz6hqo8yT%2FAzpcEv73kYu47Q2Bdczqdm8RZZJyv%2BfJSVBexfglVczOXMQ1tXzJt%2BQ%3D%3D&expense_claim%5Bname%5D=Some+title+for+the+claim+comes+here&commit=Spesenabrechnung+erstellen" for ::1 at 2015-05-25 19:19:16 +0200
Processing by ExpenseClaimsController#new as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"iVEJfsXCoIKdngHRe6Zviqz6hqo8yT/AzpcEv73kYu47Q2Bdczqdm8RZZJyv+fJSVBexfglVczOXMQ1tXzJt+Q==", "expense_claim"=>{"name"=>"Some title for the claim comes here"}, "commit"=>"Spesenabrechnung erstellen"}
  Rendered expense_claims/_form.html.slim (2.3ms)
  Rendered expense_claims/new.html.slim within layouts/application (4.8ms)
  Rendered layouts/_sidebar.html.slim (0.7ms)
  Rendered layouts/_flashes.html.slim (0.1ms)
  Rendered layouts/_topbar.html.slim (0.1ms)
Completed 200 OK in 947ms (Views: 945.9ms | ActiveRecord: 0.0ms)

看起来它是一个get-request而不是post-request。提交后的网址是: http://localhost:3000/expense_claims/new?utf8=%E2%9C%93&authenticity_token=iVEJfsXCoIKdngHRe6Zviqz6hqo8yT%2FAzpcEv73kYu47Q2Bdczqdm8RZZJyv%2BfJSVBexfglVczOXMQ1tXzJt%2BQ%3D%3D&expense_claim[name]=Some+title+for+the+claim+comes+here&commit=Spesenabrechnung+erstellen

为了完整性,这里是其中一个控制器的摘录: 形式:

= form_for(@expense_claim) do |f|

  - if @expense_claim.errors.any?
    ul.error-messages
      - @expense_claim.errors.full_messages.each do |message|
        li.error-message = message

  .field
    = f.label :name
    = f.text_field :name, placeholder: 'Juni Spesenabrechnung', maxlength: 100, class: 'form-control'
    p.help-block
      | Ein beschreibender Titel für die Spesenabrechnung, damit Du Dich erinnern kannst, was sie enthält.

  .actions
    = f.submit class: 'btn btn-primary'
    = link_to 'Abbrechen', expense_claims_path, class: 'btn btn-link'

控制器:

  def new
    @expense_claim = ExpenseClaim.new
  end

  def create
    @expense_claim = ExpenseClaim.new(expense_claim_params)

    if @expense_claim.save
      redirect_to @expense_claim, notice: 'Spesenabrechnung wurde erstellt'
    else
      render :new
    end
  end

型号:

class ExpenseClaim < ActiveRecord::Base
  has_many :receipts
  has_many :mileages

  validates :name, presence: true

end

资源:

resources :expense_claims

我可以通过终端创建和更新记录,没有任何问题,并且可以用于所有控制器。在试图解决这个问题几个小时后,我不知道它为什么突然不再工作了。感谢。

1 个答案:

答案 0 :(得分:0)

要做的第一件事是验证create控制器操作是否实际被调用,因为这是唯一正在进行数据库更改的地方?在def create之后,添加如下所示的行:

puts "#create called with params: #{params}"

并验证此行是否出现在Rails服务器控制台输出中。

我对您粘贴的输出(顶部)感到困惑,因为这是对new操作的GET请求。记住Rails资源路由默认值需要2步才能创建:

  1. GET #new显示准备该资源数据的表单
  2. 提交表单后,它会POST到#create,实际创建新动物。
  3. 看起来你正在复制&amp;粘贴控制台输出的错误部分,或者您的表单永远不会被提交。

    此外,转到GET #new并检查表单的HTML代码。您应该看到method="post"action="/expense_claims [NOT expense_claims/new]"

    祝你好运!