更新控制器中的两个if语句

时间:2017-11-18 15:03:13

标签: ruby-on-rails ruby controller

我有一个带更新方法的控制器。

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 %>

1 个答案:

答案 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值并仅更新一次属性,这样效率会更高一些。