【问题标题】:Rails 4 - Simple Form, Cocoon Gem nested fields - error messagesRails 4 - 简单表单,Cocoon Gem 嵌套字段 - 错误消息
【发布时间】:2016-04-03 02:25:12
【问题描述】:

我正在尝试使用 Rails 4 制作应用程序。

我将 cocoon gem 用于嵌套字段,以便嵌套子集表单。

我也在使用引导程序。

我很苦恼,因为如果出现错误,我的页面会呈现:“请查看以下问题:”消息,但没有突出显示,我找不到错误所在。

如何设置嵌套字段以在父页面中显示错误 - 甚至在嵌套的部分表单中也可以。

我在我的主要形式中使用了一些部分,

当我尝试编辑配置文件(主要)对象时,我可以在控制台中看到更新似乎已提交,但是表单再次呈现上述错误消息(但没有任何错误标识)

Started PATCH "/profiles/9" for ::1 at 2016-04-03 13:54:26 +1000
  ActiveRecord::SchemaMigration Load (0.9ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by ProfilesController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"39DIH7j7LeX7bnUnLirqKHpVPZ7vxmeKN+Q==", "profile"=>{"title"=>"", "occupation"=>"", "working_languages"=>"", "external_profile"=>"", "overview"=>"", "byline"=>"", "industry_ids"=>[""], "personality_attributes"=>{"average_day"=>"", "fantasy_project"=>"", "preferred_style"=>""}, "addresses_attributes"=>{"0"=>{"unit"=>"", "street_number"=>"1", "street"=>"Martin Street", "building"=>"", "city"=>"London", "region"=>"UK", "zip"=>"EC1A2PG", "country"=>"UK", "time_zone"=>"Eastern Time (US & Canada)", "main_address"=>"1", "project_offsite"=>"0", "_destroy"=>"false", "id"=>"1"}}}, "commit"=>"Submit", "id"=>"9"}
  User Load (1.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 9]]
  Profile Load (0.5ms)  SELECT  "profiles".* FROM "profiles" WHERE "profiles"."id" = $1 LIMIT 1  [["id", 9]]
  User Load (0.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 9]]
   (0.3ms)  BEGIN
  Industry Load (0.8ms)  SELECT "industries".* FROM "industries" INNER JOIN "industries_profiles" ON "industries"."id" = "industries_profiles"."industry_id" WHERE "industries_profiles"."profile_id" = $1  [["profile_id", 9]]
  Personality Load (0.5ms)  SELECT  "personalities".* FROM "personalities" WHERE "personalities"."profile_id" = $1 LIMIT 1  [["profile_id", 9]]
  SQL (0.6ms)  UPDATE "personalities" SET "profile_id" = $1, "updated_at" = $2 WHERE "personalities"."id" = $3  [["profile_id", nil], ["updated_at", "2016-04-03 03:54:26.755593"], ["id", 10]]
  Address Load (0.8ms)  SELECT "addresses".* FROM "addresses" WHERE "addresses"."addressable_id" = $1 AND "addresses"."addressable_type" = $2 AND "addresses"."id" = 1  [["addressable_id", 9], ["addressable_type", "Profile"]]
  Profile Load (0.5ms)  SELECT  "profiles".* FROM "profiles" WHERE "profiles"."id" = $1 LIMIT 1  [["id", 9]]
  User Load (0.7ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 9]]
   (0.3ms)  ROLLBACK
  Rendered users/_profileimgform.html.erb (6.2ms)
  Industry Load (0.6ms)  SELECT "industries".* FROM "industries"
  Qualification Load (0.5ms)  SELECT "qualifications".* FROM "qualifications" WHERE "qualifications"."profile_id" = $1  [["profile_id", 9]]
  Rendered qualifications/_qualification_fields.html.erb (34.5ms)
  Job Load (0.4ms)  SELECT "jobs".* FROM "jobs" WHERE "jobs"."profile_id" = $1  [["profile_id", 9]]
  Rendered jobs/_job_fields.html.erb (33.1ms)
  Rendered personalities/_form.html.erb (6.6ms)
  Vision Load (0.4ms)  SELECT  "visions".* FROM "visions" WHERE "visions"."profile_id" = $1 LIMIT 1  [["profile_id", 9]]
  Rendered visions/_form.html.erb (8.5ms)
  Address Load (0.3ms)  SELECT "addresses".* FROM "addresses" WHERE "addresses"."addressable_id" = $1 AND "addresses"."addressable_type" = $2  [["addressable_id", 9], ["addressable_type", "Profile"]]
  Rendered addresses/_address_fields.html.erb (262.2ms)
  Rendered addresses/_address_fields.html.erb (53.3ms)
  Rendered profiles/_form.html.erb (551.8ms)
  Rendered profiles/edit.html.erb within layouts/profile (561.3ms)
  Profile Load (0.4ms)  SELECT  "profiles".* FROM "profiles" WHERE "profiles"."user_id" = $1 LIMIT 1  [["user_id", 9]]
  Rendered pages/_nav.html.erb (7.8ms)
  Rendered pages/_footer.html.erb (1.5ms)
Completed 200 OK in 1908ms (Views: 1646.7ms | ActiveRecord: 29.7ms)

cocoon gem 的地址格式如下:

<div class="nested-fields">

  <div class="container-fluid">

                <div class="form-inputs">
                    <div class="row">
                        <div class="col-xs-3">
                            <%= f.input :unit %>
                        </div>
                        <div class="col-xs-3 col-xs-offset-1">
                            <%= f.input :street_number %>
                        </div>
                        <div class="col-xs-3 col-xs-offset-1">
                            <%= f.input :street %>
                        </div>
            </div>

            <div class="row">
                        <div class="col-xs-3">
                            <%= f.input :building %>
                        </div>
                        <div class="col-xs-3 col-xs-offset-1">
                            <%= f.input :city %>
                        </div>
                        <div class="col-xs-3 col-xs-offset-1">
                            <%= f.input :region %>
                        </div>
            </div>

                   <div class="row">
                    <div class="col-xs-3">
                        <%= f.input :zip %>
                    </div>
                    <div class="col-xs-3 col-xs-offset-1">

                <!--f.country_select(:country, {selected: @profile.country_name}, {class: "form-control"}) -->
              <%=   f.country_select  :country, priority: [ "Australia", "New Zealand", "United Kingdom" ]  %>

                    </div>
            <div class="col-xs-3 col-xs-offset-1">
              <%= f.input :time_zone %>
            </div>


           </div>

           <div class="row">
                    <div class="col-xs-3">
                        <%= f.input :main_address %>
                    </div>
                    <div class="col-xs-3 col-xs-offset-1">
                        <%= f.input :project_offsite %>
                    </div>
           </div>

           <div class="row">
            <div class="col-md-6">
            </div>

            </div>
           </div>

         <div class="row">
          <div class="col-md-6">
            <%= link_to_remove_association 'Remove this address', f %>
          </div>

        </div>
  </div>    
</div>

<div class = "debug" > <%= yield %> <%= debug(params) if Rails.env.development? %></div>

然后在我的个人资料表格中添加:

       <%= link_to_add_association 'Add an address', f, :addresses, partial: 'addresses/address_fields' %>

这令人沮丧,因为我找不到任何指示可能导致更新停止处理的错误。

【问题讨论】:

  • 通常简单的形式显示/突出显示有错误的字段。您是否使用任何自定义验证?
  • 没有。我不是。我不明白为什么它只显示“请参阅下面的错误”的标题,但没有确定错误是什么
  • 您可以在视图中显式列出所有验证错误,但一定要遍历嵌套属性。您是否在视图中有 simple_fields_for 语句来显示所有现有的子项?如果您显示更多代码会很有帮助:)(模型和视图)

标签: ruby-on-rails twitter-bootstrap simple-form cocoon-gem


【解决方案1】:

您的嵌套表单似乎不确定它们与什么相关联。您应该将按钮嵌套在输入字段中。

<div class="row-fluid">
  <div class="col-md-12">
    <h3>Your Title</h3>
    <div id="Your-form">
      <%= f.simple_fields_for :your_tables do |table| %>
        <%= render 'table_fields', f: table %>
      <% end %>
      <div class="links"></div>
      <%= link_to_add_association 'Add', f, :your_tables,  class: 'btn btn-secondary add-button' %>
    </div>
  </div>
</div>

并且有一个看起来像这样的部分。

<div class="form-inline clearfix">
  <div class="row">
    <div class="nested-fields">
      <%= f.input :table,  placeholder: "Enter a Value", label: false, input_html: { class: "form-input form-control", style: 'width:80%;'} %>
      <%= link_to_remove_association "Remove", f, class: "form-control btn btn-secondary", style: 'height:20%; display:inline; float:right;'  %>
    </div>
  </div>
</div>

【讨论】:

    【解决方案2】:

    如果没有任何示例,很难说出您是如何使用这些嵌套表单的,但让我们假设一下。

    在您的关联中使用默认验证器,应始终突出显示有错误的元素,如果您使用自定义验证器,请确保将错误添加到正确的关联中,否则您的表单中将看不到任何内容。

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      相关资源
      最近更新 更多