2016-03-08 57 views
1

我想動態設置表名作爲Activerecord的where子句中的符號。動態地將表名從字符串設置爲像「表」的符號:{status:0}

它適用於使用脂肪允許。

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 

我怎樣才能做到這一點? 感謝您的幫助。

+0

首先閱讀['SQL injection'(http://guides.rubyonrails.org /security.html#sql-injection) –

+0

我不直接將params放入方法中。我通過def類型的私人方法清理它們 – Yoshi

回答

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") 
+0

我已經試過了,它不能用於下面的錯誤。 語法錯誤,意外':',期待'}' {「reviews」.to_sym {status:10}} – Yoshi

+0

狀態是您的評論表列右側? – LHH

+0

是的!究竟!我想過濾他們的條件與包括teble – Yoshi

相關問題