Как мне обработать нули в представлениях? - PullRequest
5 голосов
/ 08 апреля 2010

У меня установлены следующие модели:

class Contact < ActiveRecord::Base
  belongs_to :band
  belongs_to :mode

  validates_presence_of :call, :mode
  validates_associated :mode, :band
  validates_presence_of :band, :if => :no_freq?
  validates_presence_of :freq, :if => :no_band?

protected

  def no_freq?
    freq.nil?
  end

  def no_band?
    band.nil?
  end
end

class Band < ActiveRecord::Base
  has_many :logs
end

class Mode < ActiveRecord::Base
  has_many :logs
end

Когда я ввожу частоту в моем новом представлении, это позволяет не указывать полосу, если введена частота. Это создает проблему в других моих взглядах, потому что группа сейчас ноль. Как сделать так, чтобы диапазон не указывался, а просто отображался как пустой в моих index и show представлениях, а затем в представлении edit разрешено уточняется в более поздний момент времени.

Я смог заставить мой index отображать пробел, выполнив:

contact.band && contact.band.name

Но я не уверен, что это лучший подход, и я не уверен, как применить подобное решение к другим моим взглядам.

Большое спасибо от рельса, новичок!

Ответы [ 5 ]

8 голосов
/ 08 апреля 2010

В моих представлениях я использую следующее для потенциально нулевых объектов в моих представлениях:

<%= @contact.band.name unless @contact.band.blank? %>

если ваш объект - массив или хеш, вы можете использовать пустой? функция вместо.

<%= unless @contacts.empty? %>
 ..some code
<% end %>

Надеюсь, это поможет!

D

3 голосов
/ 15 мая 2012

Пару лет, но все еще лучший результат Google для "rails view handle nil", поэтому я добавлю свое предложение для использования с Rails 3.2.3 и Ruby 1.9.3p0.

В application_helper.rb , добавьте это:

def blank_to_nbsp(value)
  value.blank? ? "&nbsp;".html_safe : value
end

Затем, чтобы отобразить значение в представлении, напишите что-то вроде этого:

<%= blank_to_nbsp contact.band %>

Преимущества:

  • «blank» перехватывает как нулевые значения, так и пустые строки ( детали ).
  • Простое опускание нулевого объекта или использование пустой строки может вызвать проблемы с форматированием. &nbsp; вставляет неразрывный пробел в веб-страницу и сохраняет форматирование.
  • С предложениями "если" и "если" в других ответах вам придется вводить каждое имя объекта дважды. Используя помощника, вы должны вводить каждое имя объекта только один раз.
2 голосов
/ 09 апреля 2010

Вы можете использовать Object # andand для этого:

<%= @contact.band.andand.name %>
2 голосов
/ 09 апреля 2010
<%= @contact.try(:band).try(:name) %>

Возвращается nil, если band или name не существуют как методы для соответствующих объектов.

0 голосов
/ 09 апреля 2010

<%= @contact.band if @contact.band %> тоже работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...