将表名从字符串动态设置为符号,如“table”:{status:0}

时间:2016-03-08 08:00:10

标签: ruby-on-rails ruby-on-rails-4 dynamic symbols

我想动态地将表名设置为Activerecord的where子句中的符号。

使用脂肪允许效果很好。

def find
    @users.includes(type(@params[:filter])).where(:"#{@review}" =>  { status: 10 })
end

private

def type(type)
    case type
    when 'article_review'
      @review = Review.table_name # "reviews"
      :reviews # set as incluedes(:reviews)
    when other_name
      other definition
    end
end

但我不想使用胖允许,我希望def发现如下所示

def find
   @users.includes(type(@params[:filter])).where("#{@review}": { status: 10 })
end

我该怎么做? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您应该使用to_sym方法将字符串转换为符号。

这是我的输出

2.1.5 :007 > a = "table"
 => "table" 
2.1.5 :008 > a.to_sym
 => :table

了解更多信息http://apidock.com/ruby/String/to_sym

试试这个

@users.joins(type(@params[:filter])).where("#{@review}.status = 10")