سؤال

لدي نموذج Rails الذي يتحقق من صحة تفرد قيمتين للنموذج.إذا لم تكن هاتان القيمتان فريدتين، فستظهر أخطاء التحقق ويتغير الزر "إرسال" إلى "إعادة الإرسال".أريد السماح للمستخدم بالنقر فوق الزر "إعادة الإرسال" وتجاوز التحقق من صحة النموذج.أريد أن أفعل شيئًا كهذا من وثائق التحقق من صحة القضبان:

validates_uniqueness_of :value, :unless => Proc.new { |user| user.signup_step <= 2 }

لكن ليس لدي قيمة في النموذج الخاص بي يمكنني التحقق منها... فقط المعلمات التي لها قيمة "إعادة الإرسال".

أي أفكار حول كيفية القيام بذلك؟

هل كانت مفيدة؟

المحلول

في رأيي هذه هي أفضل طريقة للقيام بذلك:

class FooBar < ActiveRecord::Base
  validates_uniqueness_of :foo, :bar, :unless => :force_submit
  attr_accessor :force_submit
end

ثم في العرض الخاص بك، تأكد من تسمية علامة الإرسال مثل

<%= submit_tag 'Resubmit', :name => 'foo_bar[force_submit]' %>

بهذه الطريقة، كل المنطق موجود في النموذج، وسيبقى رمز وحدة التحكم كما هو.

نصائح أخرى

جرب هذا:

القضبان 2: Model.save(false)
القضبان 3: Model.save(:validate => false)

إنه يتجاوز عمليات التحقق من الصحة (جميعها بالرغم من ذلك).

ليس هذا أمرًا إيجابيًا، ولكن يمكنك محاولة إضافة attr_accessor إلى النموذج الخاص بك لمعرفة ما إذا كان النموذج قد تم إرساله مرة واحدة من قبل أم لا.

فقط اضف

attr_accessor :submitted

إلى النموذج الخاص بك والتحقق من ذلك في عمليات التحقق من الصحة الخاصة بك.

يمكنك فقط إلقاء نظرة على زر الإرسال لتحديد ما إذا كنت تريد إجراء عمليات التحقق من الصحة.

def form_method
  case params[:submit]
    when "Submit" 
      'Do your validation here'
    when "Resubmit" 
      'Do not call validation routine'
  end
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top