Ruby on rails 通过params检索记录时,获取'id'的未定义方法错误`

Ruby on rails 通过params检索记录时,获取'id'的未定义方法错误`,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,在我的ReviewsController中,我有两个在操作之前调用的私有方法: def find_course @course = Course.where(:id=>params[:course_id]).first end def find_professor @professor = Professor.where(:id=>params[:professor_id]).first end 我正在通过params查询课程,由于某种原因,我在我的create方法中得到

在我的
ReviewsController
中,我有两个在
操作之前调用的私有方法:

def find_course
  @course = Course.where(:id=>params[:course_id]).first
end

def find_professor
  @professor = Professor.where(:id=>params[:professor_id]).first
end
我正在通过params查询
课程
,由于某种原因,我在我的create方法中得到了一个
未定义的方法
id',用于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
正在以部分形式调用create方法,如下所示:

<%= simple_form_for @review do |f| %>
  <%= f.input :rating %>
  <%= f.input :comment %>
  <%= f.button :submit %>
<% end %>

出于某种奇怪的原因,如果我首先将
@course=course.where(:id=>params[:course\u id])替换为
@course=course.find(7)
(7是现有课程的id),那么create方法工作得非常好。如何使用给定参数正确检索课程和教授记录?

使用

@course = Course.find(params[:course_id])
@professor = Professor.find(params[:professor_id])
请按照上面的步骤去做,你可以把两者都做好

<td><%= link_to "Add Review", new_review_path(course_id: @course.id, professor_id: professor.id) %></td>
内部控制器

def create
  @review = Review.new(review_params)
  if @review.save
    course = @review.course
    #redirect_to course_path(@course)
    redirect_to course_path(course)
  else
    render 'new'
  end
end

private
  def review_params
    params.require(:review).permit(:rating,:comment,:course_id, :professor_id, :user_id)
  end

在调用.id之前,您需要检查课程和教授对象是否已获取并存在

例如:


请检查下面给出的答案,让我了解更多的指导。嗨。我仍然收到这些错误:
[“课程必须存在”,“教授必须存在”]
@Bargain23您是否相应地更改了强参数?因为我有一个;已经在
复习参数
中提到了
教授id
课程id
?@Bargain23点击
这个按钮会创建什么url?@Bargain23你还被困在这个问题上吗?@Bargain23如果答案对你有帮助,请随意接受/投票。
<td><%= link_to "Add Review", new_review_path(course_id: @course.id, professor_id: professor.id) %></td>
<%= simple_form_for @review do |f| %>
  <%= f.input :rating %>
  <%= f.input :comment %>
  <%= f.hidden_field :course_id, :value => params[:course_id]%>
  <%= f.hidden_field :professor_id, :value => params[:professor_id] %>
  <%= f.hidden_field :user_id, :value => current_user.id %>
  <%= f.button :submit %>
<% end %>
def create
  @review = Review.new(review_params)
  if @review.save
    course = @review.course
    #redirect_to course_path(@course)
    redirect_to course_path(course)
  else
    render 'new'
  end
end

private
  def review_params
    params.require(:review).permit(:rating,:comment,:course_id, :professor_id, :user_id)
  end
if @course && @professor
  @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