2013-10-09 5 views
0

Да, я знаю, что это не рекомендуется, но я хотел бы сделать сырой SQL-код в контроллере, чтобы посмотреть, как это делается.Как сделать необработанный SQL в Rails-контроллере?

class FooController < ApplicationController 
    def foo 
    boz = 'd' 
    connection.select_rows('select * from dual').each do |r| 
     boz = r[0] 
    end 

    [boz: boz] 
    end 
end 

И тогда мой взгляд, мы надеемся, сделает «boz is» X «!».

Конечно, это не удается, потому что соединение не определено. Я пробовал ActiveRecord :: connection, но соединение кажется скорее методом экземпляра, чем константой. Очевидно, мне нужен правильный объект соединения для текущей транзакции.

Как это получить? Документация рубина немного сложна.

ответ

0

нашел - ActiveRecord :: Base.connection

... но я вижу, кто-то меня опередил. Ta.

0

Вы также можете сделать это, если ищете определенную модель.

Client.find_by_sql("SELECT * FROM clients") 

вернуть бы то же самое, как

Client.all 

Если вы не хотите, чтобы отобразить к конкретной модели вы можете получить доступ к прямой экземпляр драйвера базы данных ActiveRecord через, ActiveRecord :: Base. подключение

См. http://apidock.com/rails/ActiveRecord/Base/connection для получения конкретной документации по возможным методам.

Чтобы сделать простой необработанный вызов SQL и может использовать .Execute

Другим вариантом является использование драгоценный камень mysql2 непосредственно, это, как правило, не полезно внутри рельсов, но хотят, чтобы дать вам варианты, это предполагает, что вы используете mysql, однако другие адаптеры также могут использоваться напрямую.

client = Mysql2::Client.new(YAML.load(File.read(Rails.root.join(*%w[config database.yml])))[Rails.env]) 
results = client.query("SELECT * FROM clients") 
results.each(:symbolize_keys => true) do |row| 
    # Do something with a row 
end 
Смежные вопросы