在嵌套表单的表单中显示错误消息?

时间:2019-01-01 04:13:01

标签: ruby-on-rails ruby

问题:我有一个使用嵌套资源的表单,由于某种原因,没有错误消息像其他表单一样出现。

这是我的表单:(简称)

<%= form_for(@order, url: listing_orders_path([@listing, @listing_tweet]), remote: true) do |form| %>

<% if @order.errors.any? %>
 <ul>
   <% @order.errors.full_messages.each do |msg| %>
    <div class="alert alert-danger alert-dismissable">
     <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
      <%= msg %>
    </div>
   <% end %>
  </ul>
<% end %>

 <div class="form-group">
  <%= form.label :twitter_link, "Twitter Link" %>
  <%= form.text_field :twitter_link, class: "form-control", required: true  %>
 </div>

   <% form.hidden_field :order_type, value: 2 %>

   <%= form.submit %>

<% end %>

order.rb模型:

  validates :twitter_link, format: { with: /\A((http|https):\/\/)?(www.)?twitter.com\//,
    message: "use a valid twitter url" }

验证本身正在起作用,只是消息不会出现。

问题:如何更正我的html或任何其他代码以显示错误消息?

这个想法是,如果URL不包含或以twitter.com开头,则会出现错误消息。


我以其他形式使用了此确切的错误代码,但唯一的区别是该形式使用的是嵌套资源。所以我尝试做

如果@order([@ listing,@listing_tweet])等(其他组合类似),但均不允许页面加载。我认为@order应该可以正常工作,因为那是提交的地方

作为对可能重复项的解释。...我的验证错误消息根本没有出现。 “可能重复”问题是指他们的错误消息的顺序。

我将在下面显示我的代码在哪里工作,然后在下面显示在我的代码不工作[使用嵌套资源]

表格:

<%= form_for([@listing, @listing_tweet]) do |form| %>
   <% if @listing_tweet.errors.any? %>
      <ul>
        <% @listing_tweet.errors.full_messages.each do |msg| %>
          <div class="alert alert-danger alert-dismissable">
            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
            <%= msg %>
          </div>
          <% end %>
        </ul>
        <% end %>
  <div class="row">
    <div class="field col-10">
      <%= form.text_field :price, class: "form-control"  %>
      <%= form.label :price %>
    </div>
    <br>
    <div class="actions col-2">
      <%= form.submit "Submit", class: "btn btn-success"  %>
    </div>


    <% end %>
    </div>
  </div>

列出推文模型:

validates :price, :numericality => {:only_integer => true, greater_than_or_equal_to: 5, message: "must be great than or equal to $5" }

当text_field输入未通过验证时,以上代码会生成错误消息

此表单与我遇到的表单之间的区别是它是双嵌套表单。除了“双重嵌套”外,不确定如何解释,但是您可以看到上面的区别。

控制器中的两个create方法都使用以下格式:

else
  format.html { render :new }
  format.json { render json: @order.errors, status: :unprocessable_entity }
end

更新:

我一直认为我的create方法可能存在问题,因为我使用有效吗?在ray提到我的收费代码之后,开始...

简而言之,这是我的作品:

def create
    @order = Order.new(order_params)
    @listing = Listing.find(params[:listing_id])
    #more code here


        if @order.valid?
          begin

            ###stripe code here to create charges

          rescue Stripe::CardError => e
            charge_error = e.message
          end
          if charge_error
            flash[:error] = charge_error
            redirect_to listing_path(@listing)
          else


        respond_to do |format|
          if @order.save
            @order.update_column(:order_status, 1)
            if user_signed_in?
              # @user = current_user
              # OrderMailer.order_email(@user, @order).deliver
              format.html { redirect_to @order, notice: 'Order was successfully created.' }
              format.json { render :show, status: :created, location: @order }
              else
                format.html { render :new }
                format.json { render json: @order.errors, status: :unprocessable_entity }
              end
            end
          end
        end
      end
    end

create方法中是否有任何问题导致不会出现validates错误消息?

0 个答案:

没有答案