我有一个带更新方法的控制器。
def update
@student = Student.find(params[:student_id])
@lesson = @student.lessons.find(params[:id])
@lesson.update_attributes(lesson_params)
redirect_to @lesson.student, notice: "Les updated"
end
这很好用! 我想添加新的if语句,将:pay params从false更改为true。所以我就这样说了
def update
@student = Student.find(params[:student_id])
@lesson = @student.lessons.find(params[:id])
@lesson.update_attributes(lesson_params)
redirect_to @lesson.student, notice: "Les updated"
if @lesson.paid == nil
@lesson.paid = true
@lesson.save
redirect_to @lesson.student, notice:"Les is betaald!"
end
end
当我点击视图中的按钮更改:付费参数时,我收到此错误
param is missing or the value is empty: lesson
如果我这样做
def update
if @lesson.paid == nil
@lesson.paid = true
@lesson.save
redirect_to @lesson.student, notice:"Les is betaald!"
end
end
工作正常! 所以现在,看起来我只能使用一个if语句! 我尝试使用elsif,但它没有帮助!
参数
private
def lesson_params
params.require(:lesson).permit(:date, :time, :paid)
end
要更新的视图代码:付费参数
<% if les.paid === nil %>
<td><%= link_to "Niet betaald", [@student, les, paid: true], method: :put, class: "niet-betaald" %>
</td>
<% else %>
<td style="color:lightgrey;">Betaald</td>
<% end %>
答案 0 :(得分:0)
尝试将更新方法更改为:
def update
@student = Student.find(params[:student_id])
@lesson = @student.lessons.find(params[:id])
if @lesson.paid.nil?
lesson_params[:paid] = true
notice = 'Les is betaald!'
else
notice = 'Les updated'
end
@lesson.update_attributes(lesson_params)
redirect_to @lesson.student, notice: notice
end
其中一个问题是你在if块之前调用redirect_to,这将结束方法的执行(它本质上是调用return然后继续渲染视图)。您还调用了update_attributes,然后可能调用save,它将对数据库进行2次调用,您只需更新param值并仅更新一次属性,这样效率会更高一些。