2013-07-23 3 views
0

Я пишу вставку с отборным:Как динамически изменять постоянное назначение?

my_object_id = 7 
id_list = [1,2,4,5] 

TEST_TEMPLATE = %Q{ 
     INSERT INTO tests 
     (test_id, data_id, text, created_at, updated_at) 
     select #{my_object_id}, data_id, text, created_at, updated_at 
     from tests where id in (#{id_list}) 
    } 

ActiveRecord::Base.connection.execute(TEST_TEMPLATE); 

я получаю сообщение об ошибке, что я не могу изменить константу. Как мне вставлять значения в строку, чтобы я мог использовать ее в своих операторах insert/select?

Как это можно решить в Ruby?

+2

Какая строка кода генерирует ошибку? Я не вижу ничего плохого в том, что вы написали выше. – lurker

+2

Возможно, это устаревший код, и вы не можете ему помочь, но вы не должны генерировать необработанный SQL-код из шаблона и выполнять его с помощью ActiveRecord. Основной темой ActiveRecord является абстракция SQL, предоставляющая такие преимущества, как автоматическое экранирование для предотвращения внедрения SQL. –

ответ

1

Нет причин, чтобы сделать его постоянным.

my_object_id = 7 
id_list = [1,2,4,5] 

test_template = %Q{ 
     INSERT INTO tests 
     (test_id, data_id, text, created_at, updated_at) 
     select #{my_object_id}, data_id, text, created_at, updated_at 
     from tests where id in (#{id_list}) 
    } 

ActiveRecord::Base.connection.execute(test_template) 
2

Вот немного объяснения для @SergioTulentsev ответ:

Вы должны изменить первую букву TEST_TEMPLATE в нижний регистр, поскольку переменные, начинающиеся с заглавной буквы, фактически не являются переменными, они являются постоянными, так что вы не должны их менять.

Как показывает @SergioTulentsev в своем коде, вы должны изменить каждое письмо на нижний регистр, чтобы он соответствовал соглашениям стиля, используемым в Ruby.

+0

Собственно, вы можете изменять константы в Ruby. Вы просто получите предупреждение об этом. –

+0

И это считается плохим стилем, поэтому мы получаем предупреждение. –

+1

[Руководство по стилю Ruby] (https://github.com/bbatsov/ruby-style-guide) стоит прочитать несколько раз. –

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