访问关联集合中的下一条记录

时间:2015-07-19 18:01:57

标签: ruby-on-rails activerecord model-associations

我是Rails的新手,试图编写一个简单的flashcard程序,用户拥有一个 他们正在骑车的词汇卡片......

该模型是用户和卡之间非常直接的关系,其中:

 User  has_many :cards
 Card  belongs_to :user

基本要点是用户在索引页面上查看卡片 点击一个按钮,"翻转"到显示页面,另一边是 显示。

创建并播种了我的AR数据库,目前正在渲染 访问的功能版本和"翻转"卡片#1在我的套牌中, 但我很难进入第二张,第三张,第四张牌等等。

我已经在我的卡控制器中尝试了许多不同的AR查询变体,以获得卡片中的下一张卡片,但没有一张卡片工作......这就是我现在在我的卡片控制器中得到的:<\ n / p>

 def index
    @card = Card.all.next
    @cards = Card.all
  end
`

这是我的卡片型号:

class Card < ActiveRecord::Base
  belongs_to :user

  def self.next
    n = 1 
    if self.id != Card.all.first.id
      Card.all.find_by(id: Card.all.first.id + n)
    end
    n += 1
  end

  validates :word_text, presence: true
  validates :meaning_text, presence: true
end

这是我的佣金路线:

  Prefix Verb   URI Pattern                    Controller#Action
     root GET    /                              cards#index
    cards GET    /cards(.:format)               cards#index
         POST    /cards(.:format)               cards#create
 new_card GET    /cards/new(.:format)           cards#new
edit_card GET    /cards/:id/edit(.:format)      cards#edit
     card GET    /cards/:id(.:format)           cards#show
        PATCH    /cards/:id(.:format)           cards#update
          PUT    /cards/:id(.:format)           cards#update
       DELETE    /cards/:id(.:format)           cards#destroy
          GET    /cards/:id(.:format)           cards#show
`

.....所以,由于上述原因,下面的代码当然不是我想要它做的,但是现在这里是我的视图页面:

<div id="front_page_container" class="medium-8 medium-centered text-center columns">

  <div class="row">
  </div>
</div>

<div id="box-container">

    <br> <br> <%= button_tag(type: 'button') do %>

    <h1 style="color:yellow"> <%= @card.word_text %>    

    <ul><%= link_to 'Tap to flip card', card_path(@card) %></ul>  
    <ul> <%= content_tag(:strong,'Tap to flip the card') %> </ul>

    <% end %></h1>

</div>

<br> <br> <%= button_tag(type: 'button') do %>

    <ul><%= link_to 'New Card', cards_path(@next) %></ul>  

    <ul> <%= content_tag(:strong,'New Card') %> </ul>

<% end %>

老实说,我很困惑如何从我的索引页面(显示卡#1或@card)创建路径返回到新的索引页面 而是显示卡#2或@next ...任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

通过执行以下操作获取@next卡

@card = Card.find(params[:id])
@next = Card.where('id > ?', @card.id).first
@next = Card.first if @next.nil?

请记住,当@card是你的数据库中的最后一张牌时,你也会想要处理它,因为在这种情况下@next将是nil,这就是第三行的原因。

编辑:要修复您的特定代码,您需要在模型中修改下一个方法

def next  # This is a method on an INSTANCE of Card, not the Class
  next_card = Card.where('id > ?', self.id).first
  next_card = Card.first if next_card.blank?
  next_card
end

然后在@card上调用此方法,而不是Card,因此类似

<%= link_to 'New Card', card_path(@card.next) %>