2015-07-18 6 views
0

У меня есть метод, как это:Как присвоить значение столбца с помощью строки

class MyClass < ActiveRecord::Base 
    def assign_weighted_values 
    unless foo.nil? 
     self.weighted_foo = 3 * foo 
    end 
    unless bar.nil? 
     self.weighted_bar = 3 * bar 
    end 
    unless hoge.nil? 
     self.weighted_hoge = 3 * hoge 
    end 
    end 
end 

Но я хочу, чтобы написать это как:

def assign_weighted_values 
    %w(foo bar hoge).each do |column| 
     next if send(column).nil? 
     self.send("weighted_#{column}") = 3 * column 
    end 
    end 

Есть ли способ, чтобы назначить значение в столбце с помощью String?

+0

несколько опечаток в сторону, ваш код уже делает это - что еще вы хотите? –

+0

@FrederickCheung мой код заканчивается 'синтаксической ошибкой, неожиданным '=', ожидающим ключевое слово_end' – ironsand

+1

, что происходит потому, что вы устанавливаете метод« getter »для ваших атрибутов. self.send ("weighted _ # {column}") просто выберет значение этого атрибута. поэтому знак равенства перед этим выдает ошибку. Что вам нужно сделать, это вызвать метод «сеттер». Например, self.send ("weighted _ # {column} =", "value-you-want-to-set") – Atul

ответ

2

Вы можете использовать assign_attributes

def assign_weighted_values 
    %(foo bar hoge).each do |column| 
    next if send(column).nil? 
    assign_attributes({ "weighted_#{column}" => 3 * column }) 
    end 
end 
1
def assign_weighted_values 
    %w(foo bar hoge).each do |column| 
    next if send(column).nil? 
    self.send("weighted_#{column}=",3 * column) 
    end 
self.save 
end