我有一个页面模型,我想通过根据标题创建的句柄来找到它。
class Page < ActiveRecord::Base
belongs_to :user
validates_presence_of :title
def to_param
handle
end
def self.make_url_safe(string)
handle = string.titleize.gsub(/ /,'').underscore.dasherize[0..35]
"#{handle}/"
end
end
在我的控制器中,我有:
def show
@page = Page.find_by_handle(params[:id])
end
我正在对另一个模型做同样的事情,它运行得很好,但对佩奇没有。我一直收到这个错误:
ActiveRecord::RecordNotFound in
PagesController#show
Couldn't find Page with ID=test
其中test
是页面的句柄。我觉得几天前我创建模型时它还在工作,所以不确定是什么原因导致了问题。也许是后面的/
?
这是日志:
Started GET "/pages/test" for 127.0.0.1 at 2011-05-28 11:53:49 -0400
Processing by PagesController#show as HTML
Parameters: {"id"=>"test"}
Page Load (0.2ms) SELECT "pages".* FROM "pages" WHERE ("pages"."id" = 0) LIMIT 1
Completed in 12ms
ActiveRecord::RecordNotFound (Couldn't find Page with ID=test):
我会发布一个答案,尽管上面的评论中给出了答案:CanCan干扰to_param
——解决方案是授权控制器中的每个资源,而不是使用通用的load_and_authorize_resources
。