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