Nie wygląda na to, że interfejs Rails API udostępnia metody do wykonywania tego w sposób ogólny. Możesz spróbować uzyskać dostęp do podstawowego połączenia i użyć jego metod, np. MySQL:
st = ActiveRecord::Base.connection.raw_connection.prepare("update table set f1=? where f2=? and f3=?")
st.execute(f1, f2, f3)
st.close
Nie jestem pewien, czy istnieją inne konsekwencje dla robią to (połączenia otwarte, itp.) Śledziłbym kod Railsowy dla zwykłej aktualizacji, aby zobaczyć, co robi oprócz rzeczywistego zapytania.
Stosowanie przygotowanych zapytań pozwala zaoszczędzić trochę czasu w bazie danych, ale chyba że robisz to milion razy z rzędu, prawdopodobnie lepiej byłoby po prostu zbudować aktualizację z normalną podstawieniem Ruby, np.
ActiveRecord::Base.connection.execute("update table set f1=#{ActiveRecord::Base.sanitize(f1)}")
lub przy użyciu ActiveRecord, tak jak powiedzieli komentatorzy.
Dlaczego chcesz to zrobić przy użyciu surowego SQL, punktem ActiveRecord jest pomoc w uniknięciu tego ... – Andrew
jeśli korzystam z AR, najpierw powinienem pobrać Model Object przez AR find method z polem id, a następnie wykonać operację aktualizacji. Tak więc z widoku operacji jeden UPDATE AR potrzebuje dwóch sqlsów z bazą danych; z drugiej strony nie jestem pewien, czy metoda aktualizacji AR używa dynamicznego powiązania. więc chcę używać raw sql z dynamicznym powiązanie dla jednej interakcji z db dla operacji aktualizacji, ale nie wiem, jak przekazać parametry, aby zastąpić? w sql przez AR. – ywenbo
Jest wiele ważnych powodów, aby to zrobić. Po pierwsze, zapytanie może być zbyt skomplikowane, aby przełożyć się stosując regularną drogę Ruby ... po drugie, parametry może mieć znaków specjalnych, takich jak% lub cytatów, i jest to ból w dupie do ucieczki .. –