【发布时间】:2015-09-26 13:54:03
【问题描述】:
我有我的应用设置,用户可以在其中为电影撰写评论。我想做的是限制用户每部电影只能创建一个评论。我已经设法在我的评论控制器中完成了这一点:
class ReviewsController < ApplicationController
before_action :has_reviewed, only [:new]
....
def has_reviewed?
if Review.where(user_id: current_user.id, movie_id: @movie.id).any?
redirect_to movie_reviews_path
flash[:notice] = "You've already written a review for this movie."
end
end
end
我现在遇到的麻烦是使用 Devise 和 CanCanCan 的辅助方法将相同的逻辑转换到我的索引视图模板中。
<% if user_signed_in? && ... %> # current_user has already created a review for this movie
<%= link_to "Edit Review", edit_movie_review_path(@movie, review) %>
<% else %>
<%= link_to "Write a Review", new_movie_review_path %>
<% end %>
另外:有什么方法可以改进我的 has_reviewed? 方法中的查找?我觉得有更好的方法来编写它,但无法确定最合适的修复方法。
【问题讨论】:
标签: ruby-on-rails activerecord devise rails-activerecord