2017-02-15 40 views
1

我有一個創建大量項目的rake文件。如何在不替換變量的情況下在表格中插入數據?

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

如果你想推遲插值到以後的時間和仍然使用Ruby的字符串插值符號,你可以這樣做:

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]}的最基本插值。爲此,您可能需要採用更爲隨意的代碼評估方法,但這條道路已經鋪好了危險。

相關問題