Rails:模型或控制器中的代码

时间:2012-11-26 02:05:34

标签: ruby-on-rails-3 model-view-controller

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

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这样的方法来说,情况要糟糕得多,这些方法对Prawn有一行一行的指示,但我似乎无法让send_data从模型。

1 个答案:

答案 0 :(得分:2)

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

在您的app控制器中:

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

您的订单模型中有类似内容。

根据您的编辑,绝对不要从您的模型中send_data