Ruby on rails:respond_to和respond_with之间有什么区别?

时间:2011-07-08 06:45:18

标签: ruby-on-rails

respond_torespond_with之间有什么区别? 他们在做什么? 任何人都可以使用输出屏幕截图发布示例吗?

感谢。

2 个答案:

答案 0 :(得分:13)

有一个非常完整的答案here。本质上,respond_with与respond_to做同样的事情,但使你的代码更清洁。它仅适用于轨道3我认为

答案 1 :(得分:0)

respond_to respond_with 执行相同的工作,但 respond_with 往往会使代码变得简单,

此示例中为

def create
  @task = Task.new(task_params)

  respond_to do |format|
   if @task.save
    format.html { redirect_to @task, notice: 'Task was successfully created.' }
    format.json { render :show, status: :created, location: @task }
   else
    format.html { render :new }
    format.json { render json: @task.errors, status: :unprocessable_entity }
   end
 end
end

使用 respond_with

的相同代码
def create
  @task = Task.new(task_params)
  flash[:notice] = "Task was successfully created." if @task.save
  respond_with(@task)
end

您还需要在控制器中提及以下格式:

respond_to :html,:json,:xml

当我们将@task传递给respond_with时,它会实际检查对象是否有效?第一。如果对象无效,那么它将在创建或渲染时调用render:new:在更新时编辑。

如果对象有效,它将自动重定向到该对象的show动作。

也许您希望在成功创建后重定向到索引。您可以通过将:location选项添加到respond_with:

来覆盖重定向
def create
  @task = Task.new(task_params)
  flash[:notice] = @task.save ? "Your task was created." : "Task failed to save." 
  respond_with @task, location: task_path
end

有关详细信息,请访问此Blog