Posts
有很多Comments
。每个Comment
可选择属于User
。
如何获得有用户的帖子1的所有评论?
Comments
content post_id user_id
------- ------- -------
There is no user for this post. 1
This is an example with a user. 1 123
Another example with a user. 1 8321
我尝试过的事情:
这不会返回任何记录
@comments = Post.find(1).comments.where(:user_id != nil)
这些返回每条记录:
@comments = Post.find(1).comments.where("user_id IS NOT NULL")
@comments = Post.find(1).comments.where("user_id <> 0")
当我在页面上打印出user_ids时,看起来nil的读取为&#34; 0&#34;,但在db中仍为null。
答案 0 :(得分:0)
当评论没有用户时,您看起来有空白的user_id列。所以正确的查询应该是
@post = Post.find(1)
@comments = @post.comments.where("user_id != ''")
答案 1 :(得分:0)
我会这样做:
#app/models/post.rb
class Post < ActiveRecord::Base
has_many :comments do
def no_user
where.not(user_id: "") #-> http://robots.thoughtbot.com/activerecords-wherenot
end
end
end
#app/models/comment.rb
class Comment < ActiveRecord::Base
belongs_to :post
end
这将允许我致电:
#app/controllers/comments_controller.rb
class CommentsController < ApplicationController
def show
@post = Post.find params[:post_id]
@comments = @post.comments.no_user
end
end
-
关于空的注释
null
是数据库中的特定数据类型
我们在想要“默认”填充表的列时使用它 - 允许您不提交数据,使数据库尽可能高效地提供正确的数据分配。
对于MYSQL&amp ;;我当然会look up about the NULL
data type PGSQL。这使您能够将任何未填充的数据列定义为NULL
- 允许您调用NOT NULL
命令。
目前,您的“未定义”数据只是空白 - 不为空
答案 2 :(得分:0)
我的代码可能不代表标准方式,但它可以在两种情况下都有效(Null和空白)。
@post = Post.find(1)
@comments = @post.comments.where("user_id > 0")