如何在Squeel语句中使用动态属性/列?

时间:2012-09-27 01:40:55

标签: ruby-on-rails ruby ruby-on-rails-3 refactoring squeel

在我的previous issue中,我最终认为以下代码似乎按预期工作:

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

1 个答案:

答案 0 :(得分:2)

您可以使用send

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