【问题标题】:Single Page Multiple Model and Validation Rails 4.2单页多模型和验证 Rails 4.2
【发布时间】:2016-07-08 09:11:49
【问题描述】:

我一直在尝试让 Rails 4 显示来自不同模型的多个表单并进行验证。视图可以很好地呈现所有表单,但是当提交表单并且内容错误时,我会返回索引操作及其显示

表单中的第一个参数不能包含 nil 或为空

我的控制器

def index
    @oneWay = OneWay.new
    @twoWays = TwoWay.new
end

def one_way
    @form = OneWay.new(one_params)

   if @form.valid?
   else
    render :index
    end
end

我的观点

 <%= simple_form_for @twoWays, url: fleet_return_path, as: 'two_way',    validate: true do |f| %>

我试过了

<%= simple_form_for @twoWays, url: fleet_return_path, as: 'two_way',    validate: true do |f| %>

但它呈现但没有验证错误。

路线

constraints(FleetSubdomain) do
  namespace :fleet, path: '/' do
    get '/' => 'fleet#index', as: 'index'
    post 'one_way' => 'fleet#one_way',  :as => 'one_way'
    post 'return' => 'fleet#returning',  :as => 'return'
  end

 end

【问题讨论】:

  • 尝试渲染操作:"index"

标签: ruby-on-rails validation ruby-on-rails-4 simple-form-for


【解决方案1】:

需要添加地方显示错误 例如。 来自http://ruby.railstutorial.org/book/ruby-on-rails-tutorial

/app/views/shared/_error_messages.html.erb

 <% if object.errors.any? %>
  <div id="error_explanation">
   <div class="alert alert-error">
     The form contains <%= pluralize(object.errors.count, "error") %>.
   </div>
  <ul>
   <% object.errors.full_messages.each do |msg| %>
    <li>* <%= msg %></li>
   <% end %>
 </ul>
</div>
<% end %>

你的看法

<%= simple_form_for @twoWays, url: fleet_return_path, as: 'two_way',    validate: true do |f| %>
      <%= render 'shared/error_messages', object: f.object %>
<% end %>

【讨论】:

    【解决方案2】:

    您似乎在表单操作中提供了错误的 URL,在表单中您有“fleet_return_path”并且您显示的操作是 one_way,您是否有这样的命名路由或者您想要改为这样做,

    <%= simple_form_for @twoWays, url: one_way_path, as: 'two_way',    validate: true do |f| %>
    
     <% if f.errors.any? %>
          <div id="error_explanation">
           <div class="alert alert-error">
             The form contains <%= pluralize(f.errors.count, "error") %>.
           </div>
          <ul>
           <% f.errors.full_messages.each do |msg| %>
            <li>* <%= msg %></li>
           <% end %>
         </ul>
        </div>
        <% end %>
       ---- ------- ----------
    <% end %>
    

    请注意我已更改表单中的 url,以便它转到您在问题中给出的操作。

    【讨论】:

    • 是一个命名空间,命名为 route
    • 那么它会采取 one_way 行动吗?请粘贴该路线
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多