我正在制作书评/在线图书组应用。
在个人图书展示页面上,我想让用户决定他们是否希望查看评论,使用剧透或全部评论。因此,当页面加载时,他们应该只看到有关该书的主要信息,以及三个按钮:See Reviews
,See Spoilers
,See 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时,它会重定向到主页?!
请注意,我发现这个问题写得不好而且含糊不清,但我非常恼火,无法弄清楚如何更好地编写它。我想我在这里寻找基本策略。
答案 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的响应速度更快。