Я использую программу для аутентификации, поэтому у меня есть current_user в каждом контроллере. Мои модели:Проверить объект принадлежит current_user в контроллере (has_and_belongs_to_many)
class User < ActiveRecord::Base
has_many_and_belongs_to :posts
end
class Posts < ActiveRecord::Base
has_many_and_belongs_to :users
end
class PostsController < ApplicationController
before_filter :authenticate_user!
def show
@post = Post.find(params:id)
# need to check if @post belongs to current_user here
# ...
end
def edit
@post = Post.find(params:id)
# need to check if @post belongs to current_user here
# ...
end
end
Некоторые действия в PostsController (например показать и редактировать) нужно проверить, если сообщение извлекается из БД принадлежит CURRENT_USER. Если это не так, я хочу показать ошибку 404 и завершить выполнение (сразу после вызова ).
Очевидно, я хотел бы остаться сухим, поэтому я не хочу писать один и тот же код в каждом действии.
Я попытался написать частный метод в PostsController, однако из частного метода я не могу перенаправить на 404, а затем прервать выполнение немедленно.
A before_filter не будет работать, так как я буду исполнен перед каждым действием, и мне нужен объект @post, который выбирается внутри каждого действия.
Наконец-то я не хочу использовать дополнительные драгоценные камни, такие как CanCan.
Ммм, я думал о том, какая-то логика внутри контроллера ... но да, это довольно хорошо. Спасибо. –