2011-01-29 2 views
0

Эй, Мне нужно использовать модель current_user для выполнения некоторых вычислений внутри функции. Внутри функции мне нужно сделать что-то вроде current_user.name = 'whatever', тем самым изменив текущее значение имени.Rails клон или хэш?

Однако, я хочу, чтобы это изменение было локальным, но выполнялось только внутри этой функции. Поскольку Rails использует объекты, это проблема. Поэтому я думаю, что лучше всего делать?

Возможно, клонировать current_user для нового объекта и использовать его внутри функции? Это кажется дорогим. Или, может быть, создать хэш из модели? И если я это сделаю, фактическая модель не будет изменена?

EDIT: Кажется, что хэш работает, но нет никакого типа, связанное с ним, так что если я сделать что-то вроде:

@attacker = current_user.attributes 

затем, чтобы использовать его, я должен указать to_s как (иначе я получить нулевую ошибку по некоторым причинам):

@attacker [: имя] .to_s = 'то, что'

ответ

0

параметров?

def my_f(name) 
    new_name = "lorem" + name 
    return new_name 
end 

Где-то в контроллере:

loremized_name = my_f(current_user.name) 
+0

хмм, я Wouldn Не хотите создавать виртуальные атрибуты для всех возможных атрибутов моей модели, которые необходимо изменить. Разве вы не думаете, что это можно сделать с помощью хэшей? – Spyros

+0

Это простая переменная. Так как вам нужно «выполнить некоторые вычисления внутри функции», и вы хотите, чтобы это изменение было локальным, а только внутри этой функции, было безопасно использовать переменную в рамках вашей функции. Вы можете вернуть эту переменную или позволить ей умереть внутри вашей функции по вашему усмотрению. Виртуального атрибута не требуется. – lbz

+0

Вы правы, это тоже вариант, я также пробовал хэши, и теперь они работают нормально. Кажется, что переменное решение дешевле, хотя. – Spyros

0

Если вам нужна вся логика в вашей модели, самый простой способ будет просто клонировать его:

def local_function 
    user = current_user.clone 
    # Perform some calculations on user here 
end 
+0

yeap, это было то, что я делал, но я отказался от него и использовал переменные, как упомянуто выше lbz. Мне действительно не нравятся клонирующие объекты, если есть настоящая срочность. – Spyros

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