在我的pages_controller.rb中,我为用户的个人资料页面定义了以下内容:
def profile
if (User.find_by_username(params[:id]))
@username = params[:id]
@users = User.all.where("id = ?", User.find_by_username(params[:id]).id)
@posts = Post.all.where("user_id = ?", User.find_by_username(params[:id]).id)
else
# redirect to 404 (root for now)
redirect_to root_path, :notice=> "User not found"
end
@newPost = Post.new
end
如上所示,我使用此行显示仅属于该用户的个人资料页面上的帖子:
@posts = Post.all.where("user_id = ?", User.find_by_username(params[:id]).id)
但是,我还想添加这一行,它只会显示不到一天的帖子:
@posts = Post.where('created_at >= :seven_days_ago', seven_days_ago: Time.now - 7.days)
如何将这两者合并在一起?我以为我可以这样做:
@posts = Post.all.where("user_id = ?", User.find_by_username(params[:id]).id, 'created_at >= :seven_days_ago', seven_days_ago: Time.now - 7.days)
但这是不允许的。什么是正确的解决方案?
谢谢!
答案 0 :(得分:0)
你得到的几乎是正确的,应该使用关键参数。 这是工作解决方案
Post.where(user_id: User.find_by_username(params[:id]).id).where('created_at > ?', 7.days.ago)
答案 1 :(得分:0)
@posts = Post.all.where("user_id = ?", User.find_by_username(params[:id]).id)
@posts = Post.where('created_at >= :seven_days_ago', seven_days_ago: Time.now - 7.days)
您可以通过链接两个where
来修复它。
@posts = Post.all.where("user_id = ?", User.find_by_username(params[:id]).id)
.where('created_at >= :seven_days_ago', seven_days_ago: Time.now - 7.days)
更多,您可以使用子查询而不是两个单独的查询
@posts = Post.all.where(:user_id => User.where(:username => params[:id]))
.where('created_at >= :seven_days_ago', seven_days_ago: Time.now - 7.days)