Как запретить rails (3.1) запускать 2 выбора для одной и той же записи?

У меня есть контроллер пользователей CRUD. Когда я открываю страницу «редактирования пользователя» в браузере, мой журнал показывает следующее:

Started GET "/users/1/edit" for 127.0.0.1 at 2011-06-21 20:09:37 +0200
  Processing by UsersController#edit as HTML
  Parameters: {"id"=>"1"}
  User Load (0.2ms)  SELECT `users`.* FROM `users` WHERE
   `users`.`id` = ? LIMIT 1  [["id", 1]]
  User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE
   `users`.`id` = ? LIMIT 1  [["id", "1"]]

В действии редактирования я просто вызываю частную функцию user, которая возвращает

@user ||= User.find(params[:id])

Представление выглядит следующим образом:

<%= settings_title(@user.username) %>
<%= form_for @user, :html => { :multipart => true } do |f| %>
  <%= render "form", :user => @user
  <div class="action"><%= submit_tag t("users.edit.submit"), :class => "button" %></div>
<%= end %>

Маршрут определяется как ресурсы: пользователи делают ...

Мы будем очень признательны за любую идею, как предотвратить второй доступ к базе данных!

Обновление:

Похоже, что второй выбор базы данных можно предотвратить, вызвав

@user ||= User.find(params[:id].to_i) # notice the .to_i

в действии редактирования. Теперь я получаю:

User Load (0.1ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = ? LIMIT 1  [["id", 1]]
CACHE (0.0ms)      SELECT `users`.* FROM `users` WHERE `users`.`id` = ? LIMIT 1

, но правильно ли это сделать? Вы видите какие-либо другие побочные эффекты этого решения?

6
задан emrass 22 June 2011 в 17:45
поделиться