简单的问题。
将所有与控制器相关的方法(但不直接在视图中使用)放在帮助器中是不错的做法?
我的意思是,我的控制器仅由new
,create
,edit
等方法组成。在这些方法中,通常有另一种方法,如:
class SessionsController < ApplicationController
include SessionsHelper
...
def destroy
sign_out if signed_in?
redirect_to root_path
end
end
module SessionsHelper
def signed_in?
!current_user.nil?
end
def forget(user)
user.forget
cookies.delete(:user_id)
cookies.delete(:remember_token)
end
def sign_out
forget(current_user)
session.delete(:user_id)
@current_user = nil
end
end
最近我读过帮助器应该包含在视图中使用仅的方法,所以我不太确定上面的方法是否算得那样,因此我的方法放置是否是糟糕的做法。
有人可以向我指出考虑这种好/坏做法的相关文件吗?
答案 0 :(得分:2)
这就是控制器关注的问题。它基本上是一个普通的红宝石模块,没有铁轨助手的任何附加含义。
# app/controllers/concerns/session.rb
module Concerns
module Session
extend ActiveSupport::Concern
def signed_in?
!current_user.nil?
end
def forget(user)
user.forget
cookies.delete(:user_id)
cookies.delete(:remember_token)
end
def sign_out
forget(current_user)
session.delete(:user_id)
@current_user = nil
end
end
end
class SessionsController < ApplicationController
include Concerns::Session
helper_method :signed_in? # make it available in views
def destroy
sign_out if signed_in?
redirect_to root_path
end
end