rails嵌套表单,创建然后更新新的关联模型,而无需重新加载页面

时间:2010-10-16 12:09:11

标签: javascript ruby-on-rails ruby ajax

相关信息

  • 我有一个具有丰富属性的用户模型和几个 has_many关联。
  • 我有一个BIG表单来编辑现有的用户信息,包括嵌套字段。
  • 我已将表单分成不同div中的几种形式,并且一次只显示一种形式。 (即UI中的标签)
  • 用户可以通过单击“保存”按钮来保存信息,该按钮通过Ajax提交当前可见的表单部分。没有页面重新加载。只需使用rjs更新状态框。
  • 我使用Ryan Bates example动态添加嵌套模型的字段。

问题

如果用户使用js添加关联模型的字段 并提交n次形式 n创建新的关联模型

这是因为js-added字段没有id_属性的hidden_​​field,每次表单都被提交,params不包含该特定嵌套记录的id。即第一次没问题,在第二次ajax post请求(提醒 - 页面没有重新加载)之后应该更新该记录,而是创建新记录,因为没有为这个已经存在的记录传递id参数。

问题

我是否应该在控制器中进行脏黑客攻击,以确定是否应该保存新记录以及是否存在 - 通过添加隐藏字段和新保存的记录ID值,在视图中更新动态添加的表单。问题是 - 如何轻轻地完成,编写最易维护和最强大的代码?

目前,更新操作已经过时了,脏兮兮的想法已被评论

  def update
    @user = current_user
    respond_to do |wants|
      wants.js {
        #analyze parameters to find out which 
        #nested model is going to be saved (not updated)?
        #also save identifier of nested record in view i.e. {...."324324234" => {:a => 1, :b => 2, .... etc}}
        @user.update_attributes(params[:user])
        # check if the record of the model was saved and take it's id;
        # use identifier 324324234 to find nested form and insert hidden 
        # field with record id using rjs
      }
    end
  end

我希望我能清楚地定义我的问题。我真的想避免这样的黑客并编写漂亮的代码。我也不想用ajax重新加载页面或部分页面。有什么建议吗?

0 个答案:

没有答案