简单表格 - Rails 4 - 编辑

时间:2015-06-02 05:29:52

标签: javascript ruby-on-rails simple-form

我正在尝试使用我的rails 4 app的简单表单。

我有一个项目模型,它有一个范围模型。范围属于项目。我有第三个模型,称为参与者,属于范围。 Scope接受参与者的嵌套属性,项目接受范围的嵌套属性。

当我创建一个新项目时,我的表单有部分内容,这些部分是每个范围和参与者的嵌套表单。在我的范围表格中,我问这个项目是否涉及参与者。如果答案是真的,我使用JS表单助手来显示包含参与者表单的隐藏部分。

如果在创建项目后,我想编辑它,编辑功能会将我返回到项目表单,该表单显示参与者的复选框(为真),但隐藏参与者表单。

我的问题是,如果选中参与者复选框为true,则应显示嵌套在项目表单中的参与者表单。我的JS表单助手隐藏了这个表单,直到选中该框为真,这在创建模式下工作正常,但我需要取消检查范围表单中的参与者框并重新检查它以显示参与者表单 - 这样我就可以编辑这些字段了。

如果在没有取消选中并重新检查表单的情况下询问参与的范围问题是否属实,您是否知道如何透露参与者表格?

我的代码如下:

在我的JS表单助手中,我有(隐藏参与者嵌套表单,除非询问是否参与的范围问题是真的):

<MyPhotos>
   <Status>success</Status>
   <code>0</code>
</MyPhotos>

在我的范围表格中,我有:

$(document).on 'change', '#' + inString +  '_scope_attributes_if_participant', ()->
  if $('#' + inString +  '_scope_attributes_if_participant').is(':checked')
    $('#participationrequest').show()
  else
    $('#participationrequest').hide()

谢谢

3 个答案:

答案 0 :(得分:4)

if $('#' + inString +  '_scope_attributes_if_participant').is(':checked')
  $('#participationrequest').show()
else
  $('#participationrequest').hide()
$(document).on 'change', '#' + inString +  '_scope_attributes_if_participant', ()->
  if $('#' + inString +  '_scope_attributes_if_participant').is(':checked')
    $('#participationrequest').show()
  else
    $('#participationrequest').hide()

答案 1 :(得分:0)

您目前只检查更改后是否选中该复选框。但是,当选中框时加载表单时,更改事件不会被触发,因此您的代码不会执行。

要在页面加载时进行检查运行,请在JS中添加这样的内容(原谅我用JS代替coffeescript):

$(document).on('ready',function(){
    if $('#' + inString +  '_scope_attributes_if_participant').is(':checked')
       $('#participationrequest').show();
}

请注意,此处不需要支票的其他部分,因为默认设置是隐藏#participationrequest元素。

答案 2 :(得分:0)

试试这个:

<div id='participationrequest' style='<%= "display:none;" unless scope.if_participant? %>'>
    <%= render partial: 'you_form_partial' %>
</div>