Ошибка маршрутизации Rails3 - PullRequest
0 голосов
/ 14 декабря 2011

Мой сценарий: у фильмов есть обзоры, у комментариев есть комментарии.

Модель фильма:

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 Ответ

2 голосов
/ 14 декабря 2011

Review.where возвращает список отзывов, то, что вы хотите, это экземпляр

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

или

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

Обязательно обращайтесь с nil чехлом.

...