【问题标题】:How to dynamically add text fields on Rails 4? (not nested)如何在 Rails 4 上动态添加文本字段? (不嵌套)
【发布时间】:2016-09-29 08:51:49
【问题描述】:

我是 Rails 的新手,我需要在 Rails 的“form_for”上动态添加/删除输入字段。我正在使用这些输入来更改用户的个人资料。

这是我要动态化的 sn-p:

<%= f.label :languages, "Languages" %>
<%= f.text_field :languages, class: "shortInput", value: @parsed_json_user['user']['languages']%> <br />

我看过很多使用嵌套属性的教程(我什至不确定它们是什么)等等,但我不会使用模型。如您所见,我只想要一个具有大量值(例如数组)的对象,因为我将使用 API 来更新“用户”模型。

我需要类似的东西:

语言:
英文删除
新增

我应该使用 fields_for 吗?或者以某种方式使用 JS 或 JQuery?任何帮助将不胜感激。

我到处搜索类似的问题,但没有找到任何问题,但如果你真的知道或找到一个问题,请指出我正确的方向会很棒!

提前致谢

【问题讨论】:

  • 您确定需要一个文本字段吗?对我来说,这看起来像一个选择框。您可以使用对多选选项更具交互性的 select2。
  • 我可以为此使用一个选择框,但我认为这会限制我的用户的选择。如果我找不到解决方案,我最终会按照你的建议去做......想象一下有人只会说 Fula(或其他未列出的语言)。没有它在列表中将是一个遗憾。还是谢谢你的建议!
  • 在 select2 中,还有一个添加新条目的选项。不仅仅是那些已经存在的。
  • 这成功了!非常感谢!

标签: html ruby-on-rails forms dynamic form-for


【解决方案1】:

更新:对于单一表单,没有嵌套 - 一种选择是将您自己的 jquery 组合在一起。我使用不同的站点进行测试,但这个Jquery example 是我发现的更容易的站点。我删除了有关最大字段计数器的内容...它位于 /app/assets/javascript/.js ...

    $(document).ready(function() {

    $(".add_field_button").click(function(e){ //on add input button click
        e.preventDefault();
            $('.input_fields_wrap').append('<div><input type="text" name="mytext[]"/><a href="#" class="remove_field">Remove</a></div>'); //add input box
        }
    });

    $(".input_fields_wrap").on("click",".remove_field", function(e){ //user click on remove text
        e.preventDefault(); $(this).parent('div').remove();
    })
});

还有html代码...

    <div class="input_fields_wrap">
      <button class="add_field_button">Add More Fields</button>
      <div><input type="text" name="mytext[]"></div>
    </div>

如果您还没有运气 - Cocoon Gem 或 railscast 197/198 将使用动态的 jquery 满足您的需求。忽略有关嵌套的部分,并从中获取所需的内容。

另外,我还在寻找最近有更新的 turbolinks……你也许可以在那里找到答案……可能不是你想要的……

据我所知,这依赖于您在 Rails 中编写的两条路径,然后通过作用于 (add/delete) :before 或 :after 的 jquery 构建这些路径,以便添加/在 dom 上隐藏字段,然后更新按钮实际上将整个混乱通过 activeRecord 推送到数据库中。

【讨论】:

    【解决方案2】:

    @languages = 用户的语言

     f.collection_select :user_languages[], @languages, :id, :name , {hide_label: true, :selected => @languages.first.id} , {:style => "width: 120px",:required => true}
    

    【讨论】:

    • 考虑到@languages 是一个字符串数组,我应该用什么来代替“id”和“name”?
    • 尽量不要放这两个值
    • 我设法让它工作,但作为最终用户,我需要做两件事:选择多个项目并添加自定义值。不过谢谢你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多