コントローラーに問題のあるアクションがあります。これは私の最初のRailsアプリなので、Railsを取り巻くベストプラクティスがわかりません。
Groupというモデルと、そのコントローラーで実行されるいくつかのアクションがあります。グループIDが無効なためにコントローラーがJSONでエラーをレンダリングするテストを作成しました。レンダリングして終了する代わりに、コントローラーがレンダリングして実行を継続しているように見えます。
テスト
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
コントローラのアクション
# 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
コントローラでは、最初のifステートメントが実行されます:render :json => { :message => "group_id not found" }
しかし@group.destroy
、まだ実行中です。これは私には直感に反しているように思えます。renderメソッドはコントローラーを終了する必要があると思います。
render
呼び出された後にコントローラーが終了しないのはなぜですか?
このコードブロックの目的は、渡されたIDを持つレコードが見つからない場合に正常に回復することです。これはこのようなことをする正しい方法ですか?