Ruby on rails RubyonRails:在一个动作中使用多个respond\u来阻止是好的:最佳实践
我需要做条件检查是否渲染这个或那个。 使用Ruby on rails RubyonRails:在一个动作中使用多个respond\u来阻止是好的:最佳实践,ruby-on-rails,ruby,controller,action,response,Ruby On Rails,Ruby,Controller,Action,Response,我需要做条件检查是否渲染这个或那个。 使用respond\u to块包装条件检查是否良好? 像 或 我将在if..else中有多个响应到块 像 推荐的最佳方法是什么?在我看来,控制器操作的代码太多了。Rails是基于方法论构建的,因此您可以尝试以下方法: 如果你这样说: class SomeController < ApplicationController respond_to :html, :json , :js 要直接回答您的问题: 带有单个respond_to块的第一个选项
respond\u to
块包装条件检查是否良好?
像
或
我将在if..else中有多个响应到块
像
推荐的最佳方法是什么?在我看来,控制器操作的代码太多了。Rails是基于方法论构建的,因此您可以尝试以下方法:
如果你这样说:
class SomeController < ApplicationController
respond_to :html, :json , :js
要直接回答您的问题:
带有单个respond_to
块的第一个选项更合理,因为它涉及编写更少的代码。正如我前面提到的,Rails完全是为了避免重复,条件运算符中的两个响应块不符合编写Rails应用程序的风格。此方法是否根据请求数据类型切换响应内容?不幸的是,否。如果您想使用不同的响应格式,您仍然必须使用respond_to blocks。我更新了我的答案,让你对你的问题有一个更好的看法,但我在某个地方读到,在respond\u to
块中编写逻辑是不好的。我的第一种方法不是违反了这个惯例吗?我不知道你在哪里读到这篇文章(也许如果你提供了一个很棒的来源),但是从风格上看,第二种写作方法效率很低。另外,不管条件是真是假,你还是要使用一个响应。所以在性能方面,我认为这也不重要。
if @applicant.user_id.nil?
# Some logic
respond_to do |format|
format.js
format.html { redirect_to applicant_path(params[:id]) }
end
else
respond_to do |format|
format.json { render json: {message: t('_applicants.flash.applicant_already_assigned')}, status: 400 }
end
end
class SomeController < ApplicationController
respond_to :html, :json , :js
def someaction
if aplicant.id.nil?
redirect_to applicant_path(params[:id])
end
else
flash[:notice] = "Applicant already assigned"
end
end