簽署了範圍,我想在我的文章模型使用類似軌道4:只有當用戶沒有
scope :published, -> { where(:published => true) }
只有當用戶沒有簽署。如果用戶已登錄,那麼我想顯示所有文章。我意識到Article模型本身不能訪問Devise的user_signed_in?
方法,所以這個邏輯應該可能存在於控制器中。
的問題是,在控制器中會造成大量冗餘的,因爲這樣的:
def index
if params[:search].present?
@search = params[:search]
if user_signed_in?
@articles = Article.where('title LIKE ? OR body LIKE ?', "%#{@search}%", "%#{@search}%")
else
@articles = Article.published.where('title LIKE ? OR body LIKE ?', "%#{@search}%", "%#{@search}%")
end
elsif params[:uid].present?
@user = User.find(params[:uid])
if user_signed_in?
@articles = @user.articles.order :created_at
else
@articles = @user.articles.published.order :created_at
end
else
if user_signed_in?
@articles = Article.all.desc
else
@articles = Article.published.desc
end
end
end
是否有更好的方法可以讓我避免冗餘,在這裏,但經常檢查,如果用戶使用的是前簽署published
範圍?
由於
謝謝,Pundit可能正是我需要保持這種簡單。 – DaniG2k