В моей модели Review у меня есть следующее:
class Review < ActiveRecord::Base
belongs_to :vendor
belongs_to :user
has_many :votes
validates_presence_of :summary
end
Я отправляю новую запись в URL:
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