2014-02-11 2 views
0

Я работаю с Rails 4.0, и я хочу устранить некоторые повторяющиеся строки, но я не знаю, как это происходит в Rails. Как я понимаю, экземпляр контроллера создается по каждому запросу 1.Память в контроллерах Rails

class ResetController < ApplicationController 
    def reset_password 
    user = User.find_by_email(params[:email]) 
    if user 
     ... 
    end 

    def reset_user_token 
    user = User.find_by_email(params[:email]) 
    if user 
     ... 
    end 
end 

Если я не использую Rails, моя идея извлечь частный метод с использованием запоминания и удалить дублированные строки:

private 

def user 
    @user ||= User.find_by_email(params[:email]) 
end 

ли это хорошая идея сделать это в контроллере Rails? Как вы улучшаете этот код? У меня аналогичная проблема во многих частях приложения.

Похожие:
- When to use memoization in Ruby on Rails
- Rails Best Practices: Use memoization

+2

его совершенно прекрасный в этом контексте – apneadiving

ответ

2

Это, кажется, не имеют много общего с запоминанием, так как вы сами говорите, новый экземпляр запускается между этими запросами, так что ничего не будет «храниться ».

Удаление этих дубликатов в коде - хорошая идея. Метод Rails для этого в вашем случае будет иметь значение before_filter:

class ResetController < ApplicationController 
    before_filter :find_user 

    protected 
    def find_user 
    @user = User.find_by_email(params[:email]) 
    # here you could add some exception handling and prevent execution of action if no user is found (assuming you want to do this) 
    end 
Смежные вопросы