访问关联集合中的下一条记录
Accessing the next record in the associated collection
我是 Rails 的新手,正在尝试编写一个简单的抽认卡程序,其中用户有
他们循环浏览的一副词汇卡...
该模型是用户和卡片之间非常直接的关系,其中:
User has_many :cards
Card belongs_to :user
基本要点是用户在索引页上查看卡片,然后
单击一个按钮, "flipping" 转到显示页面,另一侧是
显示。
已创建并播种我的 AR 数据库,目前正在渲染
访问和 "flips" 我牌组中的第一张卡的功能版本,
但我无法访问第二张、第三张、第四张卡等
我已经在我的卡片控制器中尝试了很多不同的 AR 查询变体来获取卡片组中的下一张卡片,但是 none 已经奏效了......这是我现在在我的卡片控制器中得到的:
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 的位置...任何帮助将不胜感激!
通过执行以下操作获得@next 卡片
@card = Card.find(params[:id])
@next = Card.where('id > ?', @card.id).first
@next = Card.first if @next.nil?
请记住,当@card 是您数据库中的最后一张卡片时,您也需要处理它,因为在这种情况下@next 将为 nil,这就是第三行的原因。
编辑:要修复您的特定代码,您需要像这样修改模型中的 next 方法
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) %>
我是 Rails 的新手,正在尝试编写一个简单的抽认卡程序,其中用户有 他们循环浏览的一副词汇卡...
该模型是用户和卡片之间非常直接的关系,其中:
User has_many :cards
Card belongs_to :user
基本要点是用户在索引页上查看卡片,然后 单击一个按钮, "flipping" 转到显示页面,另一侧是 显示。
已创建并播种我的 AR 数据库,目前正在渲染 访问和 "flips" 我牌组中的第一张卡的功能版本, 但我无法访问第二张、第三张、第四张卡等
我已经在我的卡片控制器中尝试了很多不同的 AR 查询变体来获取卡片组中的下一张卡片,但是 none 已经奏效了......这是我现在在我的卡片控制器中得到的:
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 的位置...任何帮助将不胜感激!
通过执行以下操作获得@next 卡片
@card = Card.find(params[:id])
@next = Card.where('id > ?', @card.id).first
@next = Card.first if @next.nil?
请记住,当@card 是您数据库中的最后一张卡片时,您也需要处理它,因为在这种情况下@next 将为 nil,这就是第三行的原因。
编辑:要修复您的特定代码,您需要像这样修改模型中的 next 方法
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) %>