我有一个用户帖子表,其中一些是私人的,表中的布尔列(隐私)表示(真实是私有的)。在我的livefeed视图(posts / index.html.erb)中,我想只显示所有用户的非私人帖子。我可以通过我的范围来做这件事吗?
注意:在我的usersfeed视图中,我显示了current_user的私人和非私人帖子。
Post.rb
class Post < ActiveRecord::Base
belongs_to :user
# the top scope is sorting by "featured" posts (a boolean column in the Posts table)
scope :livefeed_order, order('featured DESC, created_at DESC').limit(40)
scope :userfeed_order, order('created_at DESC')
end
posts_controller.rb
class PostsController < ApplicationController
before_filter :signed_in_user, except: [:show]
def index #Livefeed
@posts = Post.livefeed_order
end
end
users_controller.rb
class UsersController < ApplicationController
before_filter :signed_in_user, only: [:edit, :update, :show]
def show
@user = User.find(params[:id])
@posts = @user.posts.userfeed_order
end
end
文章/ index.html.erb
<%= render @posts %>
用户/ show.html.erb
<%= render @posts %>
答案 0 :(得分:2)
Rails&gt; = 4.1不再允许名称与BLACKLISTED_CLASS_METHODS匹配的作用域(IE public
,private
,protected
,allocate
,new
,{ {1}},name
,parent
...请参阅:GitHub上的BLACKLISTED_CLASS_METHODS和dangerous_class_method?。所以,......
...同时:
superclass
...适用于Rails&lt; 4.1,你可能想尝试像
这样的东西scope :public, -> { where(privacy: false) }
...以确保未来的兼容性。
答案 1 :(得分:1)
您可以创建另一个名为'public'的范围,
#in your model
scope :public, lambda {
:conditions => { privacy: false }
}
#in your index action
@posts = Post.livefeed_order.public
想法是,你可以链接范围,
HTH