В рельсах, как ограничить количество записей пользователей, сохраненных в базе данных, прежде чем просить обновить свой аккаунт

Я добавляю небольшой способ управления неподписанным пользователем и подписанным пользователем. В основном моя идея заключается в том, что все пользователи, которые регистрируются с использованием Devise, получают учетную запись. Однако моя модель или количество постов, которые пользователь может хранить в базе данных на основе найденного идентификатора пользователя, должно составлять 25 постов. Я предполагаю, что следующее будет работать;

модель

class Post
  belongs_to :user
  validate :quota, :on => :refresh

  def quota
     Posts = Posts.find(params[:id])
     if user.posts.count >= 25
        flash[:error] = "Sorry you need to upgrade"
     end
  end

end 

Обновление - это то, над чем я работаю, когда он захватывает посты и добавляет эти посты в current_user в базе данных или присваивает идентификатор current_user каждому посту, который он добавляет в базу данных.

я прав на вышеуказанную функцию? или я должен добавить счетчик проверки в мой контроллер / модель обновления следующим образом;

class dashboard
   def refresh
      ...
      if self.user.posts.count >= 25
         flash[:error] = "You've reached maximum posts you can import"
      end
   end
end

1 ответ

Решение

Я бы использовал before_filter на соответствующем контроллере (ах):

class PostsController < ApplicationController
  before_filter :check_quota # you could add here: :only => [:index, :new]

  private # optionnal

  def check_quota
    if user.posts.count >= 25
      @quota_warning = "You've reached maximum posts you can import"
    end
  end
end 

И в представлении (ях):

<% if @quota_warning.present? %>
  <span><%= @quota_warning %></span>
<% end %>

Затем добавьте проверку в модель, чтобы обеспечить ограничение:

class Post < ActiveRecord::Base
  belongs_to :user
  before_save :check_post_quota

  private # optionnal

  def check_post_quota
    if self.user.posts.count >= 25
      self.errors.add(:base, "You've reached maximum posts you can import")
      return false
    end
  end
end
Другие вопросы по тегам