2012-09-27 1 views
1

В моей previous issue я закончил тем, что следующий код, кажется, работает, как ожидалось:Как использовать динамические атрибуты/столбцы в инструкциях Squeel?

def my_squeel_query 
    table_name = Squeel::Nodes::Stub.new("#{self.class.to_s.tableize}_comment_associations".to_sym) 

    commenters. 
    .where{ 
     table_name.article_id.eq(my{self.id}) 
    } 
end 

Можно ли сделать article_id заявление как динамический, как сделал для переменной table_name?

То есть, я хотел бы сделать что-то, как-как следующее:

def my_squeel_query 
    table_name = Squeel::Nodes::Stub.new("#{self.class.to_s.tableize}_comment_associations".to_sym) 

    commenters. 
    .where{ 
     table_name.<DYNAMIC_KEY>.eq(my{self.id}) # '<DYNAMIC_KEY>' refers to a column name present in the 'commenters' database table. 
    } 
end 

ответ

2

Вы можете использовать send.

column_name = :article_id 
commenters.where{ 
    table_name.send(column_name).eq(my{self.id}) 
} 
+0

Как установить значение '_column_name_'? – Backo

+0

Я не уверен, что понимаю, что вы просите. Я отредактировал свой ответ, но column_name может быть символом или строкой. Просто установите столбцы, которые вы хотите проверить где-то, и это все. – oldergod

+0

... и просто замените 'table_name' на ваше имя таблицы. –