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

これは基本的にmuが言ったことですが、これが私の見解です。

アプリコントローラーの場合:

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あなたの編集ごとに、あなたのモデルから絶対にしないでください。

于 2012-11-26T03:20:42.967 に答える