使用条件逻辑查看书籍的评论,以确定要显示的评论

时间:2016-10-19 21:33:43

标签: ruby-on-rails

我正在制作书评/在线图书组应用。

在个人图书展示页面上,我想让用户决定他们是否希望查看评论,使用剧透或全部评论。因此,当页面加载时,他们应该只看到有关该书的主要信息,以及三个按钮:See ReviewsSee SpoilersSee All

现在看起来这应该是一项非常简单的任务。如果我使用JS和jQuery,我会隐藏所有元素并让按钮触发jQuery显示它们是否匹配对象扰流代码,但是这在Rails中不起作用。

我已经尝试在视图中执行js,我尝试通过自己的路径运行逻辑,我已经尝试过控制器和帮助器中的功能,但没有任何作用! Auuugghh!我已经工作了将近两天并且想把我的电脑搞砸了。当然,这是我6个月后第一个回到Rails的项目,我一直在Node工作,我的Rails生锈了。这里的代码可能是相关的,但它是Rails所以它遍布整个地方所以它可能更容易看到github repo,就在这里。 https://github.com/nwimmer123/readit_rails

我一直在巡航StackOverflow并阅读APIDock,但还没有能够解决这个问题。任何帮助将不胜感激。

show.html.erb

  <div class="container">
    <%= button_to "Show Reviews", class: "btn btn-primary col-xs-2" %>
    <%= button_to "Show Spoilers", class: "btn btn-primary col-xs-2" %>
    <%= link_to "Show It All", controller: "books", method: "find_reviews", class: "btn btn-primary col-xs-2"%>

  </div>

<% if @show_the_reviews == true %>
    <div class="container">
      <% @reviews.each do |review| %>
        <% if review.book_id.to_s == params[:id].to_s %>
        <div class="review">
          <div>
            <strong><%= review.user.name %></strong>
            <% if review.spoiler == "1" %>
              <span class="center-text">SPOILER</span>
            <% end %>
          </div>
          <p><%= review.body %></p>
          <button class="pull-right">Respond</button>
        </div>
        <% end %>
      <% end %>
    </div>
<% end %>

</div>
书籍控制器

  def show
    @user = current_user
    @reviews = Review.all       
  end

  private

  def book_params
    params.require(:book).permit(:title, :author, :genre, :image, :publication_date, :publisher, :synopsis)
  end

  def current_book
    @book = Book.find_by_id(params[:id])
  end

  def find_reviews
    puts "LOOK HERE!!!!!!"
    @reviews.each do |review|
      if review.book_id.to_s == params[:id].to_s
        puts review.spoiler
      end
    end
    @show_the_reviews = true
   redirect_to book_path(@book.id)
  end

end

当我点击Show It All时,它会重定向到主页?!

请注意,我发现这个问题写得不好而且含糊不清,但我非常恼火,无法弄清楚如何更好地编写它。我想我在这里寻找基本策略。

1 个答案:

答案 0 :(得分:2)

你可以使用jQuery轻松完成,只需给评论一个合适的类..

<% review_class = review.spoiler == true ? ' spoiler' : ' spoiler-free' %>
<div class="review <%= review_class%>">

然后在视图顶部放置一些<script>,切换显示/隐藏$('.spoiler')$('.spoiler-free')并让按钮onclick调用js函数。< / p>

您可以通过使用提交按钮创建无字段表单,并在调用的操作测试params[:commit]中执行此操作,该操作将具有单击的按钮文本,然后在条件中使用它用于过滤掉是否检索扰流评论,非扰流评论或两者的逻辑。但是jQuery的响应速度更快。