如何限制用户可以为一个场地编写的评论数量?
如果他们试图两次审查一个场地,我还想要一个flash消息提示。
我不太确定我应该在我的问题中包含哪些代码,但继续创建审核方法:
审核控制器
def create
@review = current_user.reviews.create!(params[:review])
@review.venue = @venue
if @review.save
flash[:notice] = 'Thank you for reviewing this venue!'
respond_to do |format|
format.html { redirect_to venue_path(@venue) }
format.js
end
else
render :action => :new
end
end
感谢任何帮助,非常感谢!
修改
我已将此辅助方法添加到场地控制器中:
def reviewed?
if current_user.reviews.for_venue(@venue).empty?
true
else
false
end
end
并将我的表格包裹在:
<% if reviewed? %>
form
<% end %>
但这只是为VenuesController返回未定义的方法`review'
答案 0 :(得分:1)
也许你应该使用before_validation回调,以便你可以检查场地是否已经被用户审查过。您可以在创建行中包含场地:
current_user.reviews.create!({:venue_id => @venue.id}.merge(params[:review]))
对于验证,请使用以下内容:
before_validation :check_if_already_reviewed
def check_if_already_reviewed
if (check if already reviewed)
return false
else
return true
end
end
答案 1 :(得分:1)
如果您可以阻止用户首先查看场地,那会更好。在您的视图中(或创建帮助程序),检查用户是否已经审查过该场地(许多方法)。如果是,请不要显示评论表。简单。如果你是OC,那就是你在登记控制器的时候。