在“新”控制器上执行AJAX调用

时间:2010-06-06 17:05:57

标签: ruby-on-rails ajax

在我的rails应用程序中,我希望将一个可排序列表作为对象创建的一部分。 Railscast中建议的最佳做法添加了acts_as_list插件,然后启动AJAX调用以更新项目位置。但是,AJAX调用不适用于未保存的模型,这是new的情况。

一种解决方案是立即将模型保存在new上并重定向到edit。这会产生很好的副作用,即持续进行任何更改,以便用户在中断时可以恢复工作。

但是,此解决方案增加了保存无效模型的不必要的复杂性,从而损害了rails的验证过程。有没有更好的方法来允许AJAX +验证而不需要做太多的工作?

2 个答案:

答案 0 :(得分:1)

您的操作对任何其他操作所具有的参数具有相同的访问权限。您可以将未保存对象的参数传递回操作,并且可以将具有属性集的对象重新初始化返回到视图。例如:

<强>控制器:

class WidgetsController < ApplicationController
  def new
    @widget = params.has_key?(:widget) ? Widget.new(params[:widget]) : Widget.new
  end
  ..
end

然后在您的视图中,您必须通过链接或表单发送params到新操作。

答案 1 :(得分:0)

您可以在“会话”中临时存储未保存的对象。

like(此代码必须在控制器中)

my_model = MyModel.new(params[:my_model])
session[:my_model_tmp] = my_model