所以现在,我有一个rails应用程序打开一个带有文章标题的模态窗口。 我试图让用户点击模态窗口上的右箭头,它将通过从模型中提取下一篇文章来移动到下一篇文章。有没有人对如何以最佳方式做到这一点有任何想法?如何在视图中获取提示对象,更新它并在视图上再次显示它?
编辑:这是一个随机的想法,但是你可以用虚拟数据进行ajax调用,该数据调用控制器中的一个函数来检索下一篇文章并使用该数据呈现页面吗?还有更好的方法吗?答案 0 :(得分:1)
我试图允许用户点击模态窗口上的右箭头,该箭头将通过从模型中提取下一篇文章来移动到下一篇文章。
根据这句话,你的想法似乎是操作的顺序是这样的:
但它不必按此顺序排列。事实上,最直接的(在我看来,优雅)这样做的方法是在请求原始文章时在控制器的show方法中找到下一篇和之前的文章,并嵌入他们的链接进入模态中的箭头。这样,当加载第5条的页面时,箭头已经指向第4条和第6条。因此订单将是:
例如,我们假设文章表中的id号也表示它们相对于彼此的位置。在现实生活中,情况不太可能如此,但为了简单起见,我们可以假设它:
def show
@article = Article.find(params[:id])
# at this time, also find next and previous
@next = Article.find(params[:id] + 1)
@previous = Article.find(params[:id] - 1)
end
然后,在你的show.html.erb中:
<%= link_to "Next", articles_path(@next) %>
<%= link_to "Previous", articles_path(@previous) %>
当然,而不是一个&#34; next&#34;链接的文字,您将包围模式中下一个和上一个箭头的链接。所以它可能是这样的:
<%= link_to articles_path(@next) do %>
<img src="nextarrow.png">
<% end %>
你明白了。您也可以通过向remote: true
方法添加link_to
来使用AJAX执行此操作。如果你这样做,而不是重新加载整个页面,你可以只重新加载模态对话框内容,并更新箭头的链接。
还有其他方法可以做到这一点。例如,如果此应用程序将被大量使用,并且在用户查看其中一个文章时,文章的顺序可能会发生变化,则可能需要更加动态的请求 - 响应实现,从而您可以发送当前文章ID和&#34; next&#34;或&#34; prev&#34;到应用程序,然后应用程序首先找到下一篇或上一篇文章,然后用它呈现展示模板。