Ruby on Rails:在视图中调用什么?

时间:2016-03-03 16:01:18

标签: ruby-on-rails model-view-controller

我在模型中有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

2 个答案:

答案 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元素并链接到下一个元素。

在我看来,模型只是一个知道如何从数据库中保存和获取信息的类,可能还有一些计算信息,因此所有与视图相关的逻辑应该在其他地方。