0

澄清一下:我是 Ruby 和 Rails 的新手。

我试图用这里这里这里的建议来解决我的问题,但它们似乎与我的问题没有直接关系,或者我太笨了,无法理解。

我正在尝试测试一个我不更新对象并且我希望我的应用程序重定向的场景。我不确定我的控制器代码是否正确,我想我可能没有涵盖这种情况。这是我的测试代码:

  test "should not update status if nothing has changed" do
    sign_in users(:rodrigo)
    put :update, id: @status
    assert_redirected_to status_path(assigns(:status))
    assert_equal assigns(:status).user_id, users(:rodrigo).id
  end

,以及我的控制器更新代码:

  def update
    @status = current_user.statuses.find(params[:id])
    @document = @status.document
    if params[:status] && params[:status].has_key?(:user_id)
      params[:status].delete(:user_id)
    end
    respond_to do |format|
      if @status.update_attributes(params[:status]) &&
         @document && @document.update_attributes(params[:status][:document_attributes])
        format.html { redirect_to @status, notice: 'Status was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @status.errors, status: :unprocessable_entity }
      end
    end
  end

我已经尝试验证 if @status.changed?,但实际上没有。我在这里没有选择。如果有人想提供帮助并需要更多信息,我可以提供。

4

1 回答 1

0

给我打脸...

我在我的问题中提到过:

我已经尝试验证 if @status.changed?,但实际上没有。

当我在其中一个模型属性中添加不同的内容时,它确实发生了变化,但我只是.changed?在保存@status模型后才询问。我真的很抱歉,我还没有弄清楚 Ruby on Rais 是如何工作的。

也就是说,我想出了一个解决我的问题的方法,那就是用哈希id值设置我的模型的唯一一个属性(当然除了 ) 。在保存之前params[:status],我问是否. 如果没有,我将保持不变,否则,我只是保存它并浏览旧代码。@status.changed?redirect_to@status

当然这并没有涵盖我的所有场景,因为我还必须检查我的@document模型是否发生了变化,但这不是这个问题的范围。

于 2013-11-05T02:08:49.730 回答