2017-02-15 3 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

, 당신은이 작업을 수행 할 수 있습니다

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

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" 

심지어 간단한 방법으로이 최대를 포장 할 수 있습니다 당신은 조금 대담하기를 원한다면

어떤, 당신은 문자열로 패치 수 :

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

이것은 #{x}과 같은 가장 기본적인 보간법만을 수행하며, 또는 #{x+1} 또는 심지어 #{x[y]}이 아님에 유의하십시오. 이를 위해 좀 더 임의적 인 코드 평가 방법을 사용해야 할 수도 있지만 그 도로는 위험에 처해 있습니다.