在我的应用程序中,我有一个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()返回的数据?
答案 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