2013-09-28 3 views
0

У меня есть несколько моделей, которые являются разными типами учетной записи пользователя - то есть модель пользователя, модель администратора, гостевая модель.Как встраивать скрипты Rails внутри друг друга?

Я пытаюсь создать форум как часть приложения, которое я делаю. Когда создается сообщение, атрибут user_type устанавливается на тип пользователя, создавшего сообщение. Я хочу сделать что-то довольно простое, но я не могу это обработать. В принципе, я хочу получить имя пользователя, создавшего сообщение. Я не могу просто использовать что-то наподобие post.user.username, так как у меня есть несколько разных моделей, и я не хочу делать что-то уродливое с операторами if, так есть ли лучший способ? Это может показать, что я пытаюсь добиться (хотя это не работает):

created by:<%= post.#{user_type}.username %> 

, который будет затем выводить соответствующий код:

post.user.username 
or post.admin.username 
or post.guest.username 

Спасибо!

ответ

0

Может быть, ваш лучший курс действий

class Post < ActiveRecord::Base 
    ... 
    def username 
    [user,admin,guest].find(&:present?).try(:username) 
    end 
end 

Вы можете вставить это в вашей модели, или даже лучше, а decorator.

Теперь вы можете просто сделать это на ваш взгляд:

created by:<%= post.username %> 

find получает первую вещь, которая реагирует на present?. Другими словами, он находит первое, что не ноль. Затем мы пытаемся вызвать username на то, что возвращает этот метод. Если для этого сообщения нет user, admin или guest, метод вернет nil.

+0

Не могу проверить его в настоящее время, но это похоже на то, что я был после, спасибо. Примите решение при тестировании. – ecs

Смежные вопросы