0

这里最好的方法是什么?我正在尝试清理一些代码,我想知道控制器是否是这种逻辑的最佳位置:

if user_signed_in?
  if current_user.try(:admin?)
    @docs = Doc.chronologic.page(params[:page]).per(5)
    @orders = Order.chronologic.page(params[:page]).per(5)
  else
    @docs = Doc.chronologic.where(:user_id => current_user.ftp, :retired => "active").page(params[:page]).per(5)
    @orders = Order.chronologic.where(:user => current_user.ftp).page(params[:page]).per(5)
  end
  respond_to do |format|
    format.html
    format.json { render json: @docs }
  end
else 
  redirect_to new_user_session_path
end

如果有更好的位置,它会在哪里?

谢谢!

编辑:对于像对虾有一行又一行指令的方法来说,情况要糟糕得多pdf,但我似乎无法send_data从模型中开始工作。

4

1 回答 1

2

这基本上是穆所说的,但这是我的看法。

在您的应用控制器中:

def require_logged_in
  redirect_to new_user_session_path unless user_signed_in?
end

在您的控制器中

before_filter :require_logged_in

def some_action
  @docs = Doc.chronologic.for_user(current_user).page(params[:page]).per(5)
  @orders = Order.chronologic.for_user(current_user).page(params[:page]).per(5)
  respond_to do |format|
    format.html
    format.json { render json: @docs }
  end
end

在您的 Doc 模型中

scope :for_user, lambda do |user|
  where(:user_id => user.ftp, :retired => "active") unless user.admin?
end

在您的 Order 模型中也有类似的东西。

根据您的编辑,绝对不要send_data从您的模型中进行操作。

于 2012-11-26T03:20:42.967 回答