【问题标题】:Running validation on one form for multiple non-nested models在一个表单上为多个非嵌套模型运行验证
【发布时间】:2012-04-20 15:12:12
【问题描述】:

我有一个表格可以收集两个完全不相关的模型的数据。模型没有嵌套。我想知道执行验证和显示组合错误消息的最佳方法。

我假设我需要这样的视图,但我不确定如何组合错误消息并一次显示它们。

<%= form_for @first_model do |f| %>
    <%= render 'shared/error_messages', object: f.object %>

    <%= f.label :instructions %>
    <%= f.text_area :instructions %>

    <%= fields_for @second_model do |ff| %>
        <%= ff.label :quantity %>
        <%= ff.text_field :quantity %>
    <% end %>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    fields_for 在你看来是错误的。如果second_model 嵌套在first_model 中,就会出现这种情况。

    我相信你必须在这里改变你的方法。我的建议是你应该定义一个新的class 作为一个统一了你的两个模型属性的无表模型。然后你应该发展你对这个新模型的看法。

    顺便说一句,active_attr(找到它here)gem 在让您定义此类模型方面做得非常出色。

    【讨论】:

    • 感谢您的建议。如果我这样做,我应该在哪里定义我的验证规则?将验证从当前模型移到无表模型中是有意义的,但是那种感觉很脏..你会怎么做?
    • @DerekHarrington 无表模型需要验证是的。但是你的持久模型也必须有验证。它们并不总是相同的。但两者都必须有验证。我不认为这很脏。无表模型用于表单验证。持久模型用于业务/域验证。后者与形式无关。您可以更改您的表单/用户界面,但后面的验证仍将保持不变。这就是 UI 与领域/业务逻辑解耦的原理。我就是这样做的,而且我过去也这样做过。
    猜你喜欢
    • 2012-08-29
    • 2010-10-28
    • 1970-01-01
    • 2013-01-11
    • 2013-05-30
    • 1970-01-01
    • 2017-06-27
    • 2016-04-29
    • 1970-01-01
    相关资源
    最近更新 更多