仅当在同一关联资源中时,才将 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 就会消失。
如果可行请告诉我
我有课程和单词模型,其中一课有很多单词。在每个课程视图中,用户可以访问属于该课程的那些单词的显示视图。
我已经按照 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 就会消失。
如果可行请告诉我