我试图让这个循环只呈现未经审查的服务的评论表格。我无法让它正常运作。有什么想法吗?
<% @services.each do |service| %>
<% if service == @booked && !@hasReview %>
<%= form_for(service, service.reviews.new) do |f| %>
<label>Create review for</label> <%= label_tag service.title %>
<div id="user_stars"></div>
<div class form-group>
<%= f.text_area :comment, rows: 3, class: "form-control" %>
</div>
<%= f.hidden_field :service_id, value: service.id %>
<div class="actions">
<%= f.submit "Create", class: "btn btn-primary" %>
</div>
<% end %>
<% end %>
<% end %>
@ booked和@hasReview操作自行正常工作。所以我想我用IF
错误地设置了它修改
services_controller.rb
def show
@user = User.find(params[:id])
@services = @user.services
@booked = Booking.where("service_id = ? AND user_id = ?", @service.id, current_user_id).present? if current_user
@reviews = @service.reviews
@hasReview = @reviews.find_by(user_id: current_user_id) if current_user
end
reviews_controller.rb
def create
@review = current_user.reviews.create(review_params)
redirect_to request.referer
end
答案 0 :(得分:0)
你的逻辑很好看,所以我猜你的问题是你的if语句的这一部分:
if service == @booked
从services_controller中的这一行判断:
@booked = Booking.where("service_id = ? AND user_id = ?", @service.id, current_user_id).present? if current_user
看起来@booked
实例变量是一个布尔值。因此,您要将布尔值与service
进行比较,但它看起来不像service
是布尔值。
因此,您希望更改if语句,以便比较两个等效类型,在您的情况下,您可能希望比较两个布尔值。