2013-05-30 42 views
0

我正在使用ruby 1.9.3和mysql 5.5來處理Rails 3.2.9應用程序。我需要編寫一個查詢,我應該在我的控制器文件的where子句中使用用戶定義的變量。這是代碼..請讓我知道我該怎麼做!如果沒有我怎樣才能將對象轉換(我猜是這樣),我從代碼行中沒有4以便讓我可以用一個Fixnum進行比較後如何在mysql中使用ruby的用戶自定義變量?

def is_user_allowed? 
    @company_id = params[:user][:company_id] 

    #THIS LINES GIVES A SYNTAX ERROR AT '?' 
    @no_of_licenses = Company.find_by_sql("SELECT NO_OF_LICENSES FROM COMPANIES WHERE ID=?",@company_id) 

    #THIS LINE RETURNS AN OBJECT I GUESS N HENCE CANNOT COMPARE WITH FIXNUM 
    @no_of_licenses = Company.find(:first,:conditions => ["id = ?",@company_id] , :select => 'no_of_licenses') 

    @present_users = User.where("company_id = ?", @company_id).count 

    if @present_users < @no_of_licenses 
     return true 
    else 
     return false 
    end 
    end 

回答

1

你只需要調用字段名(列名)在返回的對象上。對於前:

@no_of_licenses = Company.find(:first,:conditions => ["id = ?",@company_id] , :select => 'no_of_licenses').no_of_licenses 

上面的查詢可以作爲

@no_of_licenses = Company.where(:id => @company_id).pluck(:no_of_licenses).first 
+0

謝謝洛特阿米特!他們都工作:) –

1
@no_of_licenses = Company.find_by_sql("SELECT NO_OF_LICENSES FROM COMPANIES WHERE ID= #{@company_id}") 

我覺得這是..ü想要的簡化。

+0

嗯,我不會推薦這個解決方案,因爲@company_id直接被從params作爲'@company_id = params [:user] [:company_id]''。所以,有可能是SQL注入。 –

+0

即使這個工程.. –

+0

Company.select(:no_of_lincenses).where(:id => @company_id)你也可以使用它。它將在rails 3.2.12中工作 –

相關問題