gpt4 book ai didi

ruby-on-rails - Rails 渲染后退出 Controller

转载 作者:行者123 更新时间:2023-12-04 06:28:27 25 4
gpt4 key购买 nike

我的 Controller 中有一个操作有问题。这是我的第一个 Rails 应用程序,所以我不确定 Rails 的最佳实践。

我有一个名为 的模型群以及它的 Controller 中的一些操作。
我编写了一个测试,由于组 ID 无效,应该会导致 Controller 在 JSON 中呈现错误。看起来 Controller 正在渲染并继续执行,而不是渲染和退出。

测试

test 'should not remove group because of invalid group id' do
post(:remove, {'group_id' => '3333'})
response = JSON.parse(@response.body)
assert_response :success
assert_equal 'Success', response['message']
end

Controller 操作
# Post remove
# group_id
def remove
if((@group = Group.find_by_id(params[:group_id])) == nil)
render :json => { :message => "group_id not found" }
end

@group.destroy
if(!Group.exists?(@group))
render :json => { :message => "Success" }
else
render :json => { :errors => @group.errors.full_messages }
end
end

在 Controller 中,第一个 if 语句执行: render :json => { :message => "group_id not found" }但是 @group.destroy仍在执行中。这对我来说似乎违反直觉,我认为渲染方法应该退出 Controller 。

为什么 Controller 在 render 之后没有退出叫做?

此代码块的目的是在使用传入的 ID 找不到任何记录时优雅地恢复。这是做这样的事情的正确方法吗?

最佳答案

就像@user1022209 所说,您可以添加返回退出操作:

render(:json => { :message => "group_id not found" }) and return

关于你的代码,我想我会这样写:
def remove
if(!Group.exists?(params[:group_id])
render :json => { :message => "group_id not found" }
else
@group = Group.find(params[:group_id]
@group.destroy
if @group.destroyed?
render :json => { :message => "Success" }
else
render :json => { :errors => @group.errors.full_messages }
end
end
end

关于ruby-on-rails - Rails 渲染后退出 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13333319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com