Как да използвам дефинирана от потребителя променлива на ruby ​​в mysql?

Работя върху приложението Rails 3.2.9 с ruby ​​1.9.3 и mysql 5.5. От мен се изисква да напиша заявка, където трябва да използвам дефинирана от потребителя променлива в клаузата where в моя контролен файл. Ето кода.. Моля, уведомете ме как мога да го направя! и ако не, как мога да преобразувам обекта (предполагам), че получавам от кодов ред № 4, за да мога да го сравня с fixnum по-късно

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

person Aks..    schedule 30.05.2013    source източник


Отговори (2)


Просто трябва да извикате името на полето (име на колона) на върнатия обект. Например:

@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
person Amit Thawait    schedule 30.05.2013

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

Мисля, че това е.. което искате.

person Sonal S.    schedule 30.05.2013
comment
Е, няма да препоръчам това решение, защото @company_id е директно взет от params като @company_id = params[:user][:company_id]. Така че има възможност за SQL инжектиране. - person Amit Thawait; 30.05.2013
comment
Company.select(:no_of_lincenses).where(:id =› @company_id) Можете да използвате и това. Ще работи в релси 3.2.12 - person Sonal S.; 30.05.2013