仅当在同一关联资源中时,才将 link 限制为上一条记录

Restrict link to previous record only if within same associated resource

我有课程和单词模型,其中一课有很多单词。在每个课程视图中,用户可以访问属于该课程的那些单词的显示视图。

我已经按照 this post 的想法为我的显示视图实现了 "Previous" 和 "Next" link。然而,一节课的第一个单词显示 "Previous" link,links 到另一节课的最后一个单词;一节课的最后一个词与另一节课的第一个词相似 links(唯一的例外是数据库的第一个和最后一个词)。如何将 previous/next link 限制为仅属于当前课程的那些单词?

词模型:

class Word < ActiveRecord::Base
  belongs_to :lesson

  def previous
    Word.where(["id < ?", id]).last
  end

  def next
    Word.where(["id > ?", id]).first
  end
end

单词显示视图:

<div class="col-xs-10 col-xs-offset-1">
  <h1 class="text-center"><%= current_word.term %></h1><br>

  <%= image_tag(current_word.image, class: 'img-responsive') %><br>

  <p class="text-center">(<%= current_word.reference %>)</p><br>

  <%= link_to "< Previous", current_word.previous if current_word.previous %>
  <%= link_to "Next >", current_word.next if current_word.next %>
</div>

字数控制器:

class WordsController < ApplicationController
  def show
  end

  private

    helper_method :current_word
    def current_word
      @current_word ||= Word.find(params[:id])
    end
end

在你看来,你能做这样的事情吗:

<% if current_word == Word.first %>
  <%= link_to "Next >", current_word.next if current_word.next %>
<% elsif current_word == Word.last %>
  <%= link_to "< Previous", current_word.previous if current_word.previous %>
<% else %>
  <%= link_to "< Previous", current_word.previous if current_word.previous %>
  <%= link_to "Next >", current_word.next if current_word.next %>
<% end %>

编辑

所以试试,

<%= link_to "< Previous", current_word.previous if current_word.previous.lesson_id == current_word.lesson.id %>
<%= link_to "Next >", current_word.next if current_word.next.lesson_id == current_word.lesson.id %>

这样,一旦下一个或上一个单词来自不同的课程,即具有不同的 lesson_id,link 就会消失。

如果可行请告诉我