В рельсах, как ограничить количество записей пользователей, сохраненных в базе данных, прежде чем просить обновить свой аккаунт
Я добавляю небольшой способ управления неподписанным пользователем и подписанным пользователем. В основном моя идея заключается в том, что все пользователи, которые регистрируются с использованием 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