СУХИЕ мои взгляды, помощник / метод / что-то еще? - PullRequest
0 голосов
/ 17 ноября 2009

В прошлом писали несколько сайтов RoR, но никогда не беспокоились о том, чтобы «высушить» мои взгляды, потому что только я смотрел на код.

Просто запускаю новый сайт, который, скорее всего, будет совместным и нуждается в помощи

Я вызываю эту строку несколько раз в моих представлениях и из разных мест.

<%= Person.find_by_id(rider.person_id).name %>

Я бы хотел просто сделать

<%= get_name(rider.person_id) %>

Так что я бы предположил, что я бы положил этот код куда-нибудь

def get_name=(id)
    Person.find_by_id(id).name
end

Но где? Я пробовал в модели и в качестве помощника, но всегда получаю nomethoderror.

Ответы [ 4 ]

0 голосов
/ 17 ноября 2009

Rails - это соглашение о конфигурации. Все его вспомогательные методы принимают самые распространенные параметры, если они не переопределены. Однако модели ActiveRecord не имеют полезного значения по умолчанию to_s.

Указание действия по умолчанию:

class Person < ActiveRecord::Base
  def to_s
    name
  end
end

Теперь каждый раз, когда вы пытаетесь оценить экземпляр лица в строковом контексте, вы получаете имя.

Итак

<%= Person.find_by_id(rider.person_id).name %>

Теперь можно заменить на

<%= rider.person %>

Для чего-либо еще вы можете указать поле и методы.

0 голосов
/ 17 ноября 2009

Как насчет метода в классе Rider, который просто возвращает имя?

def name
   person = Person.find_by_id( @person_id )
   if !person.nil?
      return person.name
   end
   return nil
end

используется как

<%= rider.name %>

или вы можете использовать метод static / class для класса Person.

 def Person.get_name( rider )
     if !rider.nil?
       person = find_by_id( rider.person_id )
       if !person.nil?
          return person.name
       end
     end
     return nil
 end

называется

 <%= Person.get_name( rider ) %>

Обратите внимание, что я удалил ссылку на идентификатор в коде представления.

0 голосов
/ 17 ноября 2009

Вы ошибаетесь, называя этот метод. Почему вы ставите знак «=» в имени метода?

Вы должны вызывать этот код только в контроллере, а в представлениях отображать только результат. Лучшее место для этого метода - помощник.

def get_person_name_by_id(id)
  Person.find_by_id(id).name || nil
end
0 голосов
/ 17 ноября 2009

попробуйте application_controller.rb

...