2017-02-15 42 views
1

У меня есть файл рейка, который создает множество предметов.Как вставить данные в таблицу без замены переменной?

namespace :db do 
    namespace :seed do 
    desc "items table" 
     task :items=> :environment do 
     Item.create(name: "first_name", process: "clean the item #{test} then pack and send to #{location}") 
     ................................................ 
     end 
    end 
end 

когда я делаю rake db:seed:items я не могу вставить эти данные в таблице, не заменяя переменную. Есть ли способ вставить эти данные без замены переменных, чтобы я мог заменить эту переменную позже?

+0

Вы хотите отложить интерполяцию '# {test}' до более поздней? Иногда для этого проще использовать простую систему шаблонов, например [Handlebars] (https://github.com/cowboyd/handlebars.rb). – tadman

+0

@tadman Что я сделал, я использовал одиночную кавычку, чтобы вставить данные в таблицу. но я пытаюсь сделать замену переменных позже? – Kavincat

+0

А теперь у нас есть вопрос. – tadman

ответ

1

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

string = 'clean the item #{test} then pack and send to #{location}' 
values = { 
    test: "paperclip", 
    location: "head office" 
} 

string.gsub(/\#\{([^}]+)\}/) do 
    values[$1.to_sym] 
end 

# => "clean the item paperclip then pack and send to head office" 

Вы можете даже обернуть это в простой метод:

def interpolate(string, values) 
    string.gsub(/\#\{([^}]+)\}/) do 
    values[$1.to_sym] 
    end 
end 

Что, если вы хотите быть немного смелым, вы можете залатать в строку:

class String 
    def interpolate(values) 
    self.gsub(/\#\{([^}]+)\}/) do 
     values[$1.to_sym] 
    end 
    end 
end 

Обратите внимание, что это делает только самую основную интерполяцию таких вещей, как #{x}, а не #{x.method_call} или #{x+1} или даже #{x[y]}. Для этого вам может понадобиться использовать более произвольный метод оценки кода, но эта дорога вымощена с опасностью.

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

  • Нет связанных вопросов^_^