获取所有没有空字段的记录

时间:2014-08-30 07:24:12

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

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。

3 个答案:

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