Rails:用于访问模型方法返回的数据的Canned / RESTful方式

时间:2013-02-06 20:47:40

标签: ruby-on-rails ruby rest

在我的应用程序中,我有一个User模型,它定义了一个返回Activity对象列表的历史方法,显示了用户执行的最后N个动作。 UserController#history方法使用视图连接它。

代码如下:

class UserController < ApplicationController
  def history
    user = User.find(params[:id])
    @history = user.history(20)
  end
end

class User < ActiveRecord::Base
  has_many :activities    

  def history(limit)      
      ...
  end
end

当然,我还将此行添加到我的routes.rb文件中:

match '/user/:id/:action', :controller => 'user'

所以现在当我去localhost:3000 / user / 8 / history我看到用户8的历史。一切正常。

作为一个Rails NOOB,我想知道是否有一些针对这种情况的固定解决方案可以简化代码。我的意思是,如果/ user / 8是用于访问User 8页面的RESTful方式,是否可以告诉Rails / user / 8 / history应该显示通过在User 8上调用history()返回的数据?

2 个答案:

答案 0 :(得分:2)

首先,名称控制器的约定是复数形式,除非它仅用于单个资源,例如会话。

关于我认为您在路由中使用resources“帮助程序”的路由,您可以做的是指定用户的资源路由也有成员操作来获取此类历史记录

resources :users do
  member do
    get :history
  end
end

我认为没有更清洁的方法来做到这一点

您可以在此处查看http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

答案 1 :(得分:0)

就轨道标准而言,这是在您的案例中显示历史的正确方法。在rails中,控制器被认为是视图和模型的中间件,因此定义一个动作history对我来说似乎很好。

您可以更好地指定路线:

resources :user do
  get 'history', :on => :member #it will generate users/:id/history as url.
end