我在模型中有next
方法。
def self.next(comment, key = :id)
self.where("#{key} > ?", comment.send(key)).first
end
在我看来,我可以说例如:(不起作用)
= link_to "next", @comment.next(@comment)
调用此方法的正确方法是什么?
routes.rb中:
Rails.application.routes.draw do
resources :articles do
resources :comments do
end
end
end
答案 0 :(得分:1)
您已将next
定义为类方法(与实例方法相比),因此您需要:
= link_to "next", Comment.next(@comment)
如果您希望能够呼叫@comment.next
,请将实例方法定义为:
def next(key = :id)
Comment.where("#{key} > ?", self.send(key)).first
end
答案 1 :(得分:1)
模型知道这不是好的风格,你应该把它放在控制器中。你应该尝试一个名为kaminari的宝石,这个宝石可以让你对这些元素进行分页,所以在你的评论控制器中你可以有类似的东西:
def show
@comment = Comment.order(id: :asc).page(params[:page]).per(1)
end
然后在你看来,只需添加这个kaminari助手:
<%= paginate @comment %>
你得到下面的分页栏,一切正常(宝石的魔力)。
如果你不喜欢这样,你可以尝试在控制器中添加下一个方法,或找到next和current元素并链接到下一个元素。
在我看来,模型只是一个知道如何从数据库中保存和获取信息的类,可能还有一些计算信息,因此所有与视图相关的逻辑应该在其他地方。