سؤال

كيف يمكنني تحقيق ذلك؟

<% for agent in @broker.agents %>
  ...
  <% if agent.cell %><span class="cell-number">Cell: <%= agent.cell %></span><% end %>
  ...
<% end %>

أريد إجراء اختبار لمعرفة ما إذا كان لدى الوكيل رقم خلية، وإذا كان الأمر كذلك، فاعرض ما هو موجود داخل الشرط.ما لدي حاليًا لا يبدو ناجحًا؛يعرض فقط "الخلية:".

أفكار؟

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

المحلول

وهذا ما طلبتم:

<% for agent in @broker.agents %>
  <% unless agent.cell.blank? %>
    <span class="cell-number">Cell: <%= agent.cell %></span>
  <% end %>
<% end %>

والخلية؟ يعمل الأسلوب سواء الخلية معدومة أو سلسلة فارغة. ويضيف القضبان وظائف مماثلة لسمات كل أكتيفيريكورد. هذا وسوف تبدو أجمل قليلا:

<% for agent in @broker.agents %>
  <span class="cell-number">
    Cell: <%= agent.cell? ? "none given" : agent.cell %>
  </span>
<% end %>

وعلامة الاستفهام والقولون تشكل سريع "إذا ثم: آخر" بيان. هناك نوعان من علامات الاستفهام في التعليمات البرمجية أعلاه لأن واحدا هو جزء من الخلية اسم الأسلوب؟ والآخر هو جزء من إذا / ثم / بناء آخر.

نصائح أخرى

أعطي إجابة مفصلة للغاية على هذا السؤال "كيف يمكنني التحقق مما إذا كان العمود له قيمة؟".

أولًا، من المهم ملاحظة أن السمة يمكن أن تحتوي على أربعة أنواع من القيم.

  1. لا شيء القيمة أي "لا شيء" المخزنة في قاعدة البيانات
  2. فارغ القيمة أي "" سلسلة فارغة مع بدون مسافات
  3. فارغ خيط مع المساحات " ".
  4. القيمة الموجودة في قاعدة البيانات أي أ سلسلة غير فارغة.

فيما يلي السلوك التفصيلي لجميع الطرق الحالية (Ruby 2.2.2) التي يمكن استخدامها في هذه الحالة.

الطريقة الأولى: .empty?

  1. ل لا شيء value => يطرح استثناءً

    2.2.2 :037 > object.attribute
    => nil
    2.2.2 :025 > object.attribute.empty?
    NoMethodError: undefined method `empty?' for nil:NilClass
    
  2. ل فارغ القيمة أي "" سلسلة فارغة مع بدون مسافات

    2.2.2 :037 > object.attribute
    => ""
    2.2.2 :025 > object.attribute.empty?
    true
    
  3. فارغ خيط مع المساحات " ".

    2.2.2 :041 > object.attribute
    => " " 
    2.2.2 :042 > object.attribute.empty?
    => false
    
  4. القيمة الموجودة في قاعدة البيانات أي أ سلسلة غير فارغة.

    2.2.2 :045 > object.attribute
     => "some value" 
    2.2.2 :046 > object.attribute.empty?
     => false 
    

الطريقة الثانية: .nil?

  1. لا شيء القيمة أي "لا شيء" المخزنة في قاعدة البيانات

    2.2.2 :049 > object.attribute
     => nil 
    2.2.2 :050 > object.attribute.nil?
     => true
    
  2. فارغ القيمة أي "" سلسلة فارغة مع بدون مسافات

    2.2.2 :053 > object.attribute
     => "" 
    2.2.2 :054 > object.attribute.nil?
     => false 
    
  3. فارغ خيط مع المساحات " ".

    2.2.2 :057 > object.attribute
     => " " 
    2.2.2 :058 > object.attribute.nil?
     => false 
    
  4. القيمة الموجودة في قاعدة البيانات أي أ سلسلة غير فارغة.

    2.2.2 :061 > object.attribute
     => "some value" 
    2.2.2 :062 > object.attribute.nil?
     => false
    

الطريقة الثالثة: .blank?

  1. لا شيء القيمة أي "لا شيء" المخزنة في قاعدة البيانات

    2.2.2 :065 > object.attribute
     => nil 
    2.2.2 :066 > object.attribute.blank?
     => true
    
  2. فارغ القيمة أي "" سلسلة فارغة مع بدون مسافات

    2.2.2 :069 > object.attribute
     => "" 
    2.2.2 :070 > object.attribute.blank?
     => true 
    
  3. فارغ خيط مع المساحات " ".

    2.2.2 :073 > object.attribute
     => " " 
    2.2.2 :074 > object.attribute.blank?
     => true 
    
  4. القيمة الموجودة في قاعدة البيانات أي أ سلسلة غير فارغة.

    2.2.2 :075 > object.attribute
     => "some value" 
    2.2.2 :076 > object.attribute.blank?
     => false 
    

الطريقة الرابعة: .present?

  1. لا شيء القيمة أي "لا شيء" المخزنة في قاعدة البيانات

    2.2.2 :088 > object.attribute
     => nil 
    2.2.2 :089 > object.attribute.present?
     => false
    
  2. فارغ القيمة أي "" سلسلة فارغة مع بدون مسافات

    2.2.2 :092 > object.attribute
     => "" 
    2.2.2 :093 > object.attribute.present?
     => false
    
  3. فارغ خيط مع المساحات " ".

    2.2.2 :096 > object.attribute
     => " " 
    2.2.2 :097 > object.attribute.present?
     => false 
    
  4. القيمة الموجودة في قاعدة البيانات أي أ سلسلة غير فارغة.

    2.2.2 :100 > object.attribute
     => "some value" 
    2.2.2 :101 > object.attribute.present?
     => true 
    

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

شكرًا

if !agent.cell.blank?

وكان يعمل.

وagent.cell؟ يبدو أن تعمل نفس agent.cell.blank؟ في رور.

<% @broker.agents.each do |agent| %>
  ...
  <% unless agent.cell.empty? %>
    <span class="cell-number">Cell: <%= agent.cell %></span>
  <% end %>
  ...
<% end %>

وأجد استخدام #each، unless، وcell.empty? أن تكون أكثر قابلية للقراءة وأسهل للفهم للوهلة الأولى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top