मैं रेल के लिए नौसिखिया हूँ इसलिए कृपया धैर्य रखें

वर्तमान में यह मेरे विचार फ़ोल्डर में घरों के लिए मेरा शो पेज है

.wrapper_with_padding
 #house.show
    %h1= @house.title
    %p= number_to_currency(@house.price, :unit => "£")
    %p= simple_format(@house.description)
    Occupied: #{@house.occupied}
    %br/
    Tenant: #{@house.tenant.first_name} #{@house.tenant.last_name}

यह ठीक प्रदर्शित होता है जब डीबी हाउस मॉडल में किरायेदार_आईडी के लिए मान रखता है, लेकिन जब किरायेदार आईडी हाउस रिकॉर्ड्स के लिए शून्य है तो मुझे नीचे त्रुटि मिलती है।

C:/Sites/landlord2/app/views/houses/show.html.haml दिखा रहा है जहाँ लाइन #8 उठाई गई है:

शून्य के लिए अपरिभाषित विधि 'first_name': NilClass।

शो में वैसे भी बदलने के लिए है

Tenant: #{@house.tenant.first_name} #{@house.tenant.last_name}

तो यदि किरायेदार_आईडी खाली है तो यह कुछ टेक्स्ट प्रदर्शित कर सकता है?

धन्यवाद

1
Kush 5 फरवरी 2019, 20:10

2 जवाब

सबसे बढ़िया उत्तर

हे, आप केवल if @house.tenant.present? पूछ सकते हैं, और यदि वांछित पाठ प्रदर्शित नहीं करते हैं, तो निम्न कोड की तरह:

.wrapper_with_padding
 #house.show
    %h1= @house.title
    %p= number_to_currency(@house.price, :unit => "£")
    %p= simple_format(@house.description)
    Occupied: #{@house.occupied}
    %br/
    -if @house.tenant.present?
      Tenant: #{@house.tenant.first_name} #{@house.tenant.last_name}
    -else
      %p= 'Text to display if tenant is blank'
1
Dimitrius Lachi 5 फरवरी 2019, 20:21

व्यक्तिगत रूप से, मैं टेम्पलेट तर्क के साथ दृश्य को भरने का बड़ा प्रशंसक नहीं हूं।

सहायक विधि का उपयोग करने के लिए यह शायद एक अच्छी जगह होगी।

अपनी house_helper.rb फ़ाइल में, एक current_tenant विधि बनाने का प्रयास करें जो कुछ इस तरह दिखाई दे।

  def current_tenant(house)
    if house.tenant 
      "#{house.tenant.first_name} #{house.tenant.last_name}"
    else
      "Vacant"
    end
  end

साथ ही, किरायेदार का पूरा नाम प्रदर्शित करने जैसा कुछ ऐसा हो सकता है जो आप बहुत कुछ कर रहे हों। इस प्रकार, अपने टैनेंट मॉडल पर एक full_name विधि जोड़ना अच्छा हो सकता है ताकि आप उसका पुन: उपयोग कर सकें।

  class Tenant
    ...
    def full_name
      "#{first_name} #{last_name}"
    end
    ...
  end

इस तरह, आप सहायक विधि को कुछ सरल के रूप में साफ कर सकते हैं:

  def current_tenant(house)
    return "Vacant" unless house.tenant 

    house.tenant.full_name
  end

और आपका विचार भी साफ हो जाता है:

.wrapper_with_padding
 #house.show
    %h1= @house.title
    %p= number_to_currency(@house.price, :unit => "£")
    %p= simple_format(@house.description)
    Occupied: #{@house.occupied}
    %br/
    Tenant: #{current_tenant(@house)}
1
Sebastian Scholl 5 फरवरी 2019, 20:53