我是使用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
我可以通过终端创建和更新记录,没有任何问题,并且可以用于所有控制器。在试图解决这个问题几个小时后,我不知道它为什么突然不再工作了。感谢。
答案 0 :(得分:0)
要做的第一件事是验证create
控制器操作是否实际被调用,因为这是唯一正在进行数据库更改的地方?在def create
之后,添加如下所示的行:
puts "#create called with params: #{params}"
并验证此行是否出现在Rails服务器控制台输出中。
我对您粘贴的输出(顶部)感到困惑,因为这是对new
操作的GET请求。记住Rails资源路由默认值需要2步才能创建:
GET #new
显示准备该资源数据的表单#create
,实际创建新动物。看起来你正在复制&amp;粘贴控制台输出的错误部分,或者您的表单永远不会被提交。
此外,转到GET #new
并检查表单的HTML代码。您应该看到method="post"
和action="/expense_claims [NOT expense_claims/new]"
。