在我的rails应用程序中,我希望将一个可排序列表作为对象创建的一部分。 Railscast中建议的最佳做法添加了acts_as_list
插件,然后启动AJAX调用以更新项目位置。但是,AJAX调用不适用于未保存的模型,这是new
的情况。
一种解决方案是立即将模型保存在new
上并重定向到edit
。这会产生很好的副作用,即持续进行任何更改,以便用户在中断时可以恢复工作。
但是,此解决方案增加了保存无效模型的不必要的复杂性,从而损害了rails的验证过程。有没有更好的方法来允许AJAX +验证而不需要做太多的工作?
答案 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