合并控制器线

时间:2016-12-21 16:34:34

标签: ruby-on-rails ruby model-view-controller controller

在我的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)

但这是不允许的。什么是正确的解决方案?

谢谢!

2 个答案:

答案 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)