Rails:获取表单以仅在满足某些条件时呈现

时间:2017-03-05 01:50:20

标签: html ruby-on-rails ruby

我试图让这个循环只呈现未经审查的服务的评论表格。我无法让它正常运作。有什么想法吗?

<% @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

1 个答案:

答案 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语句,以便比较两个等效类型,在您的情况下,您可能希望比较两个布尔值。