 <p><a href="http://guides.rubyonrails.org/active_record_validations.html#uniqueness" rel="nofollow">Why not use a validation</a>:</p> <pre><code>#app/models/review.rb class Review &lt; ActiveRecord::Base validates :movie_id, uniqueness: { scope: :user_id, message: "You've reviewed this movie!" } end </code></pre> <p>This is considering your <code>review</code> model <code>belongs_to :movie</code></p> <hr> <p>You could also use an ActiveRecord callback:</p> <pre><code>#app/models/review.rb class Review &lt; ActiveRecord::Base before_create :has_review? belongs_to :user, inverse_of: :reviews belongs_to :movie def has_review? return if Review.exists?(user: user, movie_id: movie_id) end end #app/models/user.rb class User &lt; ActiveRecord::Base has_many :reviews, inverse_of: :user end </code></pre> <hr> <blockquote> <p>Is there any way to improve the lookup in my has_reviewed? method?</p> </blockquote> <pre><code> def has_reviewed? redirect_to album_reviews_path, notice: "You've already written a review for this album." if current_user.reviews.exists?(movie: @movie) end </code></pre>