2012-07-22 35 views
15

Tôi đang cố gắng tìm các bản ghi trong đó một thuộc tính được chỉ định không trống hoặc trống. Vì nó là một chuỗi nó không phải là nil trong cơ sở dữ liệu.Ruby on Rails ActiveRecord nơi thuộc tính không trống

Post.where(:sourceurl != '') 

Ở trên có vẻ như nó sẽ hoạt động nhưng tôi vẫn nhận được bản ghi trả về nơi thuộc tính source_url trống. Cách thích hợp để làm điều này là gì?

Trả lời

22

thử này

Post.where("sourceurl <> ''") 
+1

@steel xin vui lòng đọc câu hỏi ... câu hỏi là cho chuỗi ... cho số nguyên bạn có thể sử dụng 'Post.where (" sourceurl không phải là null ")' – abhas

+0

Dường như không làm việc postgres .. tôi đăng những gì làm việc cho tôi dù sao! – Abs

3

Nếu trường đó là NULL theo mặc định trong cơ sở dữ liệu của bạn, tôi nghĩ rằng cách tốt hơn để giải quyết nó để sử dụng SQL đơn giản:

Post.where("sourceurl is not null") 
+0

này sẽ bao gồm khoảng trống. – Anna

4

Lý do mã của bạn doesn' t hoạt động là tham số của bạn là #where

:sourceurl != '' 

đánh giá là true, như :sourceurl (biểu tượng) không bằng '' (một chuỗi rỗng). Như vậy mã của bạn cũng giống như

Post.where(true) 

Để xây dựng trên câu trả lời abhas, cả hai MySQL và PostgreSQL sẽ chấp nhận !=<> như tương đương.

13

Rails 4

Active Record điều kiện:

where.not(value: '') 

Phạm vi:

scope :myscope, -> { where.not(value: '') } 
+0

Không sử dụng. Trong Rails 4, điều này sẽ tạo ra 'value! = NULL' – yivo

3

Trong postgresql để bắt cả chuỗi rỗng và nil bạn có thể làm:

where("coalesce(sourceurl, '') != ''") 
+0

Chi tiết tại đây: http://www.postgresql.org/docs/8.1/static/functions-conditional.html Phần 9.13.2 – user566245

20

ActiveRecord (trong đường ray 3 và 4, tôi nghĩ) cho phép kiểm tra nhiều điều kiện bằng cách truyền một mảng làm đối số. Vì vậy, nếu bạn muốn kiểm tra cho cả hai con số không và '', bạn có thể sử dụng:

where(sourceurl: [nil, '']) 

Trong Rails 4, bạn có thể kiểm tra các điều kiện tiêu cực với .not, vì vậy cho câu hỏi ban đầu, bạn có thể làm:

Post.where.not(sourceurl: [nil, '']) 

.not có một chút kỳ diệu mà làm cho nó thuận lợi để một truy vấn SQL tinh khiết vì nó hoạt động trên cơ sở dữ liệu, thực hiện các truy vấn NOT NULL tự động, và một vài thứ khác như đã giải thích ở đây: where.not explained

+1

Bạn có thể giải thích một chút về nó không làm? Chỉ cần đặt một số mã trong một câu trả lời là không hữu ích. – wmk

+0

Cảm ơn bạn đã sửa định dạng mã của mình; được một lúc kể từ khi tôi trả lời một câu hỏi. Hãy để tôi chỉnh sửa câu trả lời. – kindofgreat