只是为了澄清:我是Ruby和Rails的新手。
我已经尝试用here,here和here中的sugestions来解决我的问题,但他们似乎与我的问题没有直接关系,或者我我也太傻了。
我正在尝试测试我不更新对象的情况,我希望我的应用程序重定向。我不确定我的控制器代码是否正确,我想我可能没有涵盖这种情况。这是我的测试代码:
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
我已经尝试验证@status.changed?
是否真的没有。我在这里没有选择。如果有人想要帮助并需要更多信息,我可以提供。
答案 0 :(得分:0)
Facepalm对我来说......
我在我的问题中提到过:
我已经尝试验证
@status.changed?
是否真的没有。
当我在其中一个模型属性中添加不同内容时,它确实发生了变化,但我在保存.changed?
模型后才问@status
。我真的很抱歉,我还在搞清楚Ruby on Rais是如何运作的。
那就是说,我想出了一个解决我的问题的方法,就是设置我的模型的唯一一个属性(当然除了id
)和{{1}的值哈希。 BEFORE 保存后,我问是否params[:status]
。如果没有,我@status.changed?
保持不变的redirect_to
,否则,我只需保存并查看旧代码。
当然,这并未涵盖我的所有情况,因为我还必须检查我的@status
模型是否已更改,但这不是此问题的范围。