使用生成的路径使ruby模型工作

时间:2014-02-06 20:22:04

标签: ruby-on-rails ruby activerecord ruby-on-rails-3.2 rails-routing

所以在你说之前,我已经阅读了这个http://guides.rubyonrails.org/routing.html,而且我也在使用Rails 3.2.13

我已将路由文件中的wiki定义为资源,因此应该获取生成的路由功能,例如wiki_path()等。我在上面的文章中读到,如果定义了路由功能,并且传入了一个对象,如果它响应所有ActiveRecord类所做的id方法,它可以找出id。

这是我的问题,我的Wiki类没有从ActiveRecord继承,虽然我已经定义了如下的id函数,但路由器仍然将整个wiki对象作为id参数传递。

def id 
  url_id = wiki.slug
  url_id ||= wiki.title
  url_id
end

当我尝试创建一个新的wiki时,我得到的错误是:

在/ wiki / what-is-the-of-life> 的ActionController :: RoutingError

No route matches {:action=>"show", :controller=>"wiki", 
:id=>#<Wiki:0x007f92a6793700 @user=nil, @path_to_repo="wiki.git", 
@wiki=#<Gollum::Wiki:70133917472560 wiki.git>, @page=nil, @persisted=false, 
  @attributes={"title"=>"what-is-the-meaning-of-life"}>}

我希望:id是Wiki类中id函数的返回值。

1 个答案:

答案 0 :(得分:2)

您需要to_param方法,而不是id

def to_param 
  wiki.slug || wiki.title
end