В моем ReviewsController
у меня есть два частных метода, вызываемых в before_action
:
def find_course
@course = Course.where(:id=>params[:course_id]).first
end
def find_professor
@professor = Professor.where(:id=>params[:professor_id]).first
end
Я запрашиваю Course
через параметры, и по какой-то причине я получаю undefined method
id 'for nil: NilClass` Ошибка в моем методе создания:
def create
@review = Review.new(review_params)
@review.course_id = @course.id
@review.professor_id = @professor.id
@review.user_id = current_user.id
if @review.save
redirect_to course_path(@course)
else
render 'new'
end
end
Метод создания вызывается в частичной форме, например:
<%= simple_form_for @review do |f| %>
<%= f.input :rating %>
<%= f.input :comment %>
<%= f.button :submit %>
<% end %>
Форма отображается черезссылка в шаблоне шоу курса:
<h2><%= @course.name %></h2>
<table class="table">
<thead>
<tr>
<th scope="col">Professors</th>
<th scope="col">Reviews</th>
</tr>
</thead>
<tbody>
<% @course.professors.each do |professor| %>
<tr>
<td><%= professor.name %></td>
<td><%= link_to "Add Review", new_review_path(course_id: @course.id, professor_id: professor.id) %></td>
</tr>
<% end %>
</tbody>
</table>
и new_review_path
, как определено в routes.rb
:
resources :reviews, path_names: { new: 'course/:course_id/professor/:professor_id' }
По какой-то странной причине, если я заменю @course = Course.where(:id=>params[:course_id]).first
на @course = Course.find(7)
(7 является идентификатором существующего курса), метод create работает отлично.Как правильно извлечь записи курса и профессора с заданными параметрами?