it-swarm-id.com

Bagaimana cara saya memeriksa apakah suatu variabel didefinisikan dalam rel?

<% if dashboard_pane_counter.remainder(3) == 0 %>
  do something
<% end>

Jika dasboard_pane_counter tidak didefinisikan, bagaimana saya bisa menilai ini menjadi false daripada melemparkan pengecualian?

27
cjm2671
<% if defined?(:dashboard_pane_counter) && dashboard_pane_counter.remainder(3) == 0  %>
  # do_something here, this assumes that dashboard_pane_counter is defined, but not nil
<% end %>
48
Matt

Saat menggunakan variabel Rails dan instance, nil memiliki metode try yang telah ditentukan, sehingga Anda dapat melakukan:

<% if @dashboard_pane_counter.try(:remainder(3)) == 0  %>
   #do something
<% end %>

jadi jika variabel instance tidak didefinisikan, try(:anything) akan mengembalikan nil dan karenanya bernilai false. Dan nil == 0 salah

5
Yule

local_assigns dapat digunakan untuk itu, karena pertanyaan ini dari beberapa tahun yang lalu, saya memverifikasi bahwa itu ada di versi Rails sebelumnya

<% if local_assigns[:dashboard_pane_counter] 
                 && dashboard_pane_counter.remainder(3) == 0%>
<% end %>

Ada dalam catatan di sini

http://apidock.com/Rails/ActionController/Base/render

3
katzmopolitan

Posting jawaban ini untuk coders pemula seperti saya. Pertanyaan ini dapat dijawab hanya dengan menggunakan dua langkah (atau satu jika menggunakan &&). Ini adalah jawaban yang lebih panjang dan kurang cantik tetapi membantu coders baru untuk memahami apa yang mereka lakukan dan menggunakan teknik yang sangat sederhana yang belum ada dalam jawaban lain. Caranya adalah dengan menggunakan variabel instance (@), itu tidak akan berfungsi dengan variabel lokal:

if @foo
  "bar"
end

Jika @foo didefinisikan, itu akan mengembalikan "bar", jika tidak, (tanpa kesalahan). Karena itu dalam dua langkah:

if @dashboard_pane_counter
  if @dashboard_plane_counter.remainder(3) == 0
    do something
  end
end
0
Dennis