Rails3路由错误

时间:2011-12-14 10:37:44

标签: ruby-on-rails-3 routes nested-routes

我的情景:电影有评论,评论有评论。

电影模特:

has_many :reviews

评论模型:

has_many :comments
belongs_to :movie

评论模型:

belongs_to :review

路线:

resources :movies do
  resources :reviews do
    resources :comments
  end
end

评论控制员:

def create
  @movie = Movie.find(params[:movie_id])
  @review = Review.where(:movie_id => @movie.id)
  @comment = @review.comments.create(params[:comment])  // Line 5
  redirect_to movie_path(@movie)
end

评论视图:

<%= form_for([@movie, r, r.comments.build]) do |f| %>
  <div class="field">
    <%= f.text_area :body %>
  </div>
  <div class="actions">
    <%= f.submit "Submit" %>
  </div>
<% end %>

我得到的错误是:

NoMethodError (undefined method `comments' for #<ActiveRecord::Relation:0x007ff5c5870010>):
app/controllers/comments_controller.rb:5:in `create'

有人可以告诉我我做错了吗?

提前致谢..

1 个答案:

答案 0 :(得分:2)

Review.where会返回一个评论列表,您想要的是一个实例

@review = Review.where(:movie_id => @movie.id).first

@review = Review.find_by_movie_id(@movie.id)

确保处理nil案例。