Как поместить логику в область видимости или метод в модели? - PullRequest
0 голосов
/ 04 июня 2010

У меня есть следующее в представлении:

            <% unless contact_email.statuses.empty?%>
                (<%= contact_email.statuses.find(:last).status%>) 
             <% end %>

contact_email является экземпляром определенной модели.

Могу ли я сделать что-то подобное?

class ContactEmail < ActiveRecord::Base
  attr_accessible :contact_id, :email_id, :status, :subject, :body, :date_created, :date_sent

  def status
    unless contact_email.statuses.empty?
      contact_email.statuses.find(:last).status
    end
  end

end

есть ли лучший способ сделать это? есть ли способ использовать || оператор по умолчанию, если пуст?

По сути, я хотел бы иметь возможность делать следующее в представлении:

<% = contact_email.status =>

Если есть значение, то отобразить его, если нет, ничего не показать.

Ответы [ 3 ]

1 голос
/ 04 июня 2010

Я бы изменил это

def status
  unless contact_email.statuses.empty?
    contact_email.statuses.find(:last).status
  end
end

до

def status
  return if statuses.empty?
  statuses.find(:last).status
end

Это должно сделать метод более понятным и более легким для понимания.

Теперь, по вашему мнению, вы можете звонить как хотите

<%= contact_email.status =>
0 голосов
/ 04 июня 2010

Я не уверен, что вы спрашиваете. При проверке похоже, что код, который вы разместили здесь, будет делать то, что вы хотите, но вы не можете просто запустить его и узнать? У нас нет полной базы кода или схемы, но у вас (надеюсь) есть: P

<%= x %> выводит значение x.to_s, а nil.to_s - пустая строка. Метод ContactEmail#status, который вы определили выше, возвращает последний статус, если он есть, в противном случае nil. Так что да, то, что вы написали, будет делать то, что вы хотите.

Если вы хотите предоставить статус по умолчанию, если его нет, как насчет (в модели):

def last_status
  unless contact_email.statuses.empty?
    contact_email.statuses.find(:last).status
  end
end

def status
  last_status || DEFAULT_STATUS
end

DEFAULT_STATUS = "Hello world!"
0 голосов
/ 04 июня 2010

Вы можете напрямую использовать следующие

<%= contact_email.statuses.find(:last).status unless contact_email.statuses.empty? %>

OR

#I change methodname as it looks more meaningful
def last_status 
  (self.statuses.empty?)? "defalut string if you want" : self.statuses.find(:last).status 
end

и назовите это, по вашему мнению, как

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