【问题标题】:Set array of values on ActiveRecord model from HTML view从 HTML 视图设置 ActiveRecord 模型上的值数组
【发布时间】:2009-08-12 22:21:06
【问题描述】:

我需要一个能够更新模型上的数组属性的视图,这样我就可以在视图上动态添加东西以便能够添加它。这有意义吗?

基本上 Foo 有 url。所以在数据库中,我只有一个文本数据类型,我想存储逗号分隔的 url 列表,我覆盖了默认的 AR setter 和 getter,这样我就可以分配一个数组,并为值获取一个数组,它会处理加入和分裂。

我不知道如何最好地进行视图。我最初需要一个文本字段,但随后需要一个“添加另一个 url”链接来为另一个 url 附加另一个文本字段,以及另一个,等等。

是否有“rails 方式”来做到这一点,还是我必须自己动手?

【问题讨论】:

    标签: javascript ruby-on-rails ruby activerecord


    【解决方案1】:

    对于表单字段的动态添加,实际上并没有特定的“Rails 方式”来实现。使用 jQuery 或 Prototype 滚动您自己的 Javascript 并不难。

    在你看来:

    <div id="url_list">
      <%= render :partial => "url_form", :collection => @my.urls %>
    </div>
    
    <%= button_to_function 'Add' { |page| page.insert_html :bottom, :url_list, :partial => "url_form", :object => Url.new } %>
    

    此代码利用 Rails 视图帮助程序并假设您使用的是 Prototype。它也不考虑从列表中删除 URL。我怀疑它是否会完全按照所写的那样工作,但我希望你能大致了解如何做到这一点。我建议立即进行的改进是让 JavaScript 不显眼。

    Complex Forms Railscasts 并没有专门针对这个问题,但 Ryan 确实包含动态添加表单,这是一个很好的例子。

    祝你好运!

    【讨论】:

      【解决方案2】:

      基本上,您最终希望发生的是@foo.urls = params[:urls],其中params[:urls] 是一个数组,而#urls= 设置器足够聪明,可以处理数组,是吗?

      我不能从个人经验中说出这个确切的案例,但这是我会尝试的……

      首先,在您的模型上使用serialize。例如,serialize :urls, Array - 听起来您已经有了一个可以工作的 getter 和 setter,但重用 ActiveRecord 提供的东西总是很好的。

      接下来,在您看来,这完全取决于您如何命名文本字段。如果参数按照约定命名,Rails 会将参数解析为数组。要遵循此约定,您的文本字段名称需要类似于 foo[urls][]。您可以简单地使用text_field_tag "foo[urls][]"f.text_field_tag "urls[]"(尽管我不记得后者是否有效——试一试)。

      当您的文本字段标签被适当命名时,其余的应该从那里很好地遵循。您将在params[:foo][:urls] 中有一个数组并将params 传递给对Foo.newFoo.create@foo.update_attributes 的调用将做正确的事情。

      (请原谅上面的语法错误,这完全是我的想法。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-23
        • 1970-01-01
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-11
        • 1970-01-01
        相关资源
        最近更新 更多