Check for Unauthorized Access

Always verify that the user is authorized to do the action he’s doing.

Example: A user owns a list of projects, he should not see projects of the others. Instead of @project = Project.find(params[:id]) . We should use

@project = @current_user.projects.find(params[:id])


I usually use Rails’ built-in has_secure_password for my own authentication system. It uses bcrypt to hash the password. When authenticating a user, get the hash of the password and compare it with the hash on the database.

Never save password in clear text.

Besides that you can use existing gems like devise or authlogic to do the same way.

Strong parameters

The performance of a web application is crucial so what optimization techniques helped me improve the performance of my app?

Tips to optimize the performance of a Ruby on Rails app

Eliminate the N+1 query problem

One of the most frequent causes of slow app performance is the N+1 query problem faced by most Ruby on Rails applications.

N+1 means one line of code results in more queries then expected

As a project grows, this problem only compounds. To avoid this problem, we need to cut the number of independent database queries. Eager-load associated relations is the best solution in this case.


We just need easily use includes to eagerly loaded the associated category…

The business model

Trước khi review quyển sách này, mình muốn gửi lời cảm ơn chân thành đến người anh PO (Product Owner) đáng kính ở công ty Codelink. Đây là món quà mình nhận được trước khi rời công ty để bắt đầu công việc kinh doanh bên ngoài. Thật sự đây là món quà siêu ý nghĩa với em.

Sách chỉ có 260 trang nên mình chỉ mất tầm 3 ngày để đọc xong, bao gồm 4 phần chính:

  • Khái niệm và lịch sử của Mô hình kinh doanh
  • Các yếu tố của mô hình kinh doanh
  • Mô hình kinh doanh…


I knew many languages before I created Ruby, but I was never fully satisfied with them. They were uglier, tougher, more complex, or more simple than I expected. Throughout the development of the Ruby language, I’ve focused my energies on making programming faster and easier. Ruby is designed to make programmers happy.- Yukihiro Matsumoto (Matz)

I have to agree with Matz that while I coding in Ruby, I feel like I’m talking to my wife — truly happy. There is an mutual understanding between us. I used to code in many other languages such as C++, PHP, Javascript and make…

Lúc viết bài blog này thì mình đã là một ông cụ ngồi văn phòng được 2 năm xuân xanh rồi. Công việc của mình hiện tại là giúp khách hàng có những trang web và cái app bé bé xinh xinh, kiếm ra triệu đô mỗi ngày. Và khách hàng của mình là những người cực kì dễ thương, họ luôn sẵn sàng trả tiền cho mình để thay đổi những tính năng mà họ yêu cầu mình làm cách đây 1–2 tuần. Với một đứa bán thân, kiếm cơm qua ngày như mình thì họ muốn gì mình…

Whether you find yourself taking on a similar role at a new company or are starting out on a brand new career path, there is sure to be a moment on your first day that you ask yourself, “How do people do things around here?”. The first few months of a new job are often about learning how you fit into the picture of the organization; crawling before you can fly. …

Nguyen Phu Cuong

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store