在我的審查模式,我有以下幾點:validates_presence_of無法正常工作...如何調試?
class Review < ActiveRecord::Base
belongs_to :vendor
belongs_to :user
has_many :votes
validates_presence_of :summary
end
我提交新的條目,如下所示的網址:
vendors/9/reviews/new
的new.html.erb包含如下形式:
<%= error_messages_for 'review' %>
<h1>New review for <%= link_to @vendor.name, @vendor%></h1>
<% form_for(@review, :url =>vendor_reviews_path(@vendor.id)) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :summary %><br />
<%= f.text_area :summary, :rows=>'3', :class=>'input_summary' %>
<%= f.hidden_field :vendor_id, :value => @vendor.id %>
</p>
<p>
<%= f.submit 'Submit Review' %>
</p>
<% end %>
當我離開領域:總結空白,我得到一個錯誤,而不是驗證消息:
當你沒有想到它時,你有一個零對象!而評估nil.name
提取的源(左右線#3)發生 錯誤:
1: <%= error_messages_for 'review' %>
2:
3: <h1>New review for <%= link_to @vendor.name, @vendor%></h1>
我不明白髮生了什麼,它的工作原理,如果:總結填充
def new
@review = Review.new
@vendor = Vendor.find(params[:vendor_id])
@review = @vendor.reviews.build
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @review }
end
end
def create
@review = Review.new(params[:review])
#@vendor = Vendor.find(params[:vendor_id]) #instantiate the vendor from the URL id -- NOT WOKRING
#@review = @vendor.reviews.build #build a review with vendor_id -- NOT working
@review = @current_user.reviews.build params[:review]#build a review with the current_user id
respond_to do |format|
if @review.save
flash[:notice] = 'Review was successfully created.'
format.html { redirect_to review_path(@review) }
format.xml { render :xml => @review, :status => :created, :location => @review }
else
format.html { redirect_to new_review_path(@review) }
format.xml { render :xml => @review.errors, :status => :unprocessable_entity }
end
end
end
我的猜測是,當它失敗時它會去redirect_to new_review_path(@review)
,所以不知道它的供應商。我該如何重定向到vendor/:vendor_id/reviews/new
?
當@review對象無效時(由...構造。new(params [:review])方法,它會在@ review.save中失敗。此時,您將被重定向到您的new_review_path,但您需要嘗試設置與「新」方法中相同的@review對象。含義 - 如果「.save」在重定向之前失敗,則加載@vendor對象並將其修補到您的@review對象中。 – 2009-05-08 07:41:23