我跟着getting started tutorial for Rails這是很好的大部分,但缺乏一些細節的時候遇到了相應的模型(評論):如何從Rails的教程地址關聯模型的缺點
- 有沒有驗證 - 很容易添加,但是我不確定如何顯示驗證失敗時的錯誤消息。
- 使用
@article.comments.build
這樣就可以顯示有效評論表單「創建」,在那屆另一個評論,所以如果你通過所有評論迭代,有好多是因爲有一個額外的空白之一。這只是一個巧合,指南列出了之前的這行代碼被執行,因此沒有遇到問題。
雖然我嘗試了1(這將在下面詳述),但我不知道如何去解決2. - 它可能屬於它自己的問題,但我甚至不知道如何命名它。
嘗試在審定/錯誤顯示
我想基本上採用同樣的策略與文章顯示錯誤信息,再次進行了點評。我知道會有一些額外的複雜性,但我試圖從邏輯上進行導航。這是我改變了:
應用程序/模型/ comments.rb
class Comment < ApplicationRecord
belongs_to :post
validates :commenter, presence: true
validates :body, presence: true
end
應用程序/控制器/ comments_controller.rb
class CommentsController < ApplicationController
def create
@article = Post.find(params[:article_id])
@comment = @article.comments.new(comment_params)
if @comment.save
redirect_to article_path(@article)
else
render 'articles/show'
end
end
def destroy
...
應用程序/意見/評論/ _form.html.erb
<%= form_for([@article, @article.comments.build]) do |f| %>
<% if self.instance_variable_defined?('@comment') and @comment.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@comment.errors.count, 'error') %> occurred:</h2>
<ul>
<% @comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :commenter, 'Your Name' %>
...
雖然這成功地顯示錯誤消息,下面的問題出現了:
- 因爲它使用了render而不是重定向,所以用戶最終得到的URL通常不能提供
GET
請求(即,/posts/1/comments) - 這很奇怪,因爲如果頁面再次載入,它將會是404。我不能使用重定向,因爲那麼嘗試創建註釋(帶有錯誤消息)將會丟失。 - 大概是因爲
@article.comments.new
之前已經呈現執行時,作爲同樣的問題,其是在2以上(關於@article.comments.build
)所述發生:顯示一個空白註釋。
所以這就是我卡住了。這些都是非常基本的問題 - 沒有它們,系統就不會完整,但我爲什麼會遇到問題而迷失了方向。
如何顯示這些錯誤,同時避免上述問題?
我試過這個,但它不起作用。問題2仍然存在,它實際上不再顯示錯誤消息。請注意,我必須更改'@comment = flash [:comment] || ...'如果閃光[:評論] @comment = Comment.new(flash [:comment])否則...'因爲它根本不能工作 - 評論只是一個散列而不是'Comment'的一個實例。 –
我懷疑我可以簡單地'閃爍'完整的錯誤信息,而不是整個評論。但是有沒有更多的「軌道」方法呢? –