Проблема: У меня есть форма, которая использует вложенные ресурсы, и по какой-то причине сообщения об ошибках не появляются, как в других моих формах.
Это моя форма: (короче)
<%= 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">×</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 должно появиться сообщение об ошибке.
Я использовал этот точный код ошибки в других формах, но единственное отличие состоит в том, что эта форма использует вложенные ресурсы.Поэтому я попытался сделать что-то вроде
if @order ([@ перечисление, @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">×</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 не проверяется
Разница между этой формой и формой, с которой у меня возникают проблемы, заключается в том, что это форма с двойным вложением.Не знаю, как объяснить, кроме «двойного вложения», но вы можете увидеть разницу выше.
Оба метода создания в контроллерах используют это форматирование:
else
format.html { render :new }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
ОБНОВЛЕНИЕ:
Я думал, что это может быть проблема с моим методом создания, так как я использую valid?перед инициацией моего кода заряда и после того, как Рэй упомянул об этом ...
Вот мое краткое описание создания:
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
Любые проблемы в методе создания, вызывающие проверкисообщение об ошибке не появляется?