仅在更改某些字段时更新对象

时间:2014-08-27 15:58:12

标签: ruby-on-rails activerecord ruby-on-rails-4

我试图弄清楚如果某些字段发生了变化,如何只更新对象。在最基本的层面上,我想更新它,如果提交的startdate或enddate不同,但是如果提交的user_id不同则不会。话虽如此,如果日期不同并且更新我想要使用user_id参数。我已经完全删除了参数,但这似乎会导致用户无法更新:

形式:

 <%= form_for(@enrollment) do |f| %>

 <div class="field">
   <%= f.label :enddate %><br>
   <%= f.text_field :enddate %>
 </div>

 <%= f.submit 'Term Plan'%>
 <%= f.submit 'Cancel Plan', name: 'cancel_plan'' %>
   

控制器:

  def update
    authorize @enrollment
    @enrollment.update_attributes(enrollment_params)
    @enrollment.user=current_user

    if params[:cancel_plan]
      @enrollment.enddate=@enrollment.startdate.yesterday
    end

    if @enrollment.save
      redirect_to @enrollment, notice: 'Enrollment was successfully updated.' 
    else
      render action: 'edit'       
    end
  end

因此,在上面的示例中,如果 enddate 与以前不同,我只想保存@enrollment对象,而不是仅仅用户不同。

任何想法,建议等都会一如既往地受到高度赞赏!

1 个答案:

答案 0 :(得分:0)

您可以尝试使用此代码:@enrollment.enddate_changed? && @enrollment.save代替@enrollment.save