0

DB から抽出されたレシピを反復処理し、各レシピから材料を解析して、材料を独自のテーブルに挿入しようとしています。問題は、現在の成分変数を内部選択に含める方法がわからないことです:現在、次のエラーが発生しています:

ExtractIngredients.rb:21:「クエリ」内:「フィールド リスト」内の不明な列「ing」(Mysql::エラー)

select ステートメントに "ing" を含める方法を教えてください。

ありがとう、リー

begin

db = Mysql.new 'localhost', 'root', 'pass', 'recs'
results = db.query "SELECT id, freeText FROM recipes"

nRows = results.num_rows

for i in 0..nRows-1
    curRow = results.fetch_row
recipeInd = curRow[0]
    recipeFreeText = curRow[1]

    ingredients = getIngredients(recipeFreeText).to_s.scan(/\'(\w+)\'/).flatten

    ingredients.each do |ing|
            db = Mysql.new 'localhost', 'root', 'pass', 'recs'

            # In the next awful select statement I'm trying to insert the current ingredient to the ingredient table if it isn't already there
         db.query "INSERT INTO ingredient(name, created_at, updated_at) SELECT ing, created_at, updated_at FROM dummytable WHERE (SELECT count(*) FROM ingredient WHERE Name = ing)=0"

        ingInd = db.query "SELECT id FROM ingredient WHERE name=ing"
            db.query "INSERT INTO ingredients_recipes(ingredient_id, recipe_id) ingInd, recipeInd"
    end     
end

end
4

2 に答える 2

1

他のRuby文字列と同じように文字列補間を使用します。#{ing}

そうは言っても、これがRailsの場合、なぜこのようなことをしているのですか?そして、成分ごとに新しいMySQLを作成しますか?このほとんどはフレームワークに組み込まれています。

于 2012-04-29T19:57:57.010 に答える
0

補間を使用する

"..... WHERE Name = '#{ing}' ...."

Railsを使用している場合は、生のSQLの代わりに、そのタスクにモデルを使用してみませんか?

于 2012-04-29T19:58:21.560 に答える