Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使ruby模型与生成的路由一起工作_Ruby On Rails_Ruby_Activerecord_Ruby On Rails 3.2_Rails Routing - Fatal编程技术网

Ruby on rails 使ruby模型与生成的路由一起工作

Ruby on rails 使ruby模型与生成的路由一起工作,ruby-on-rails,ruby,activerecord,ruby-on-rails-3.2,rails-routing,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 3.2,Rails Routing,所以在你说之前,我已经通读了这篇文章,而且我正在使用Rails 3.2.13 我在routes文件中将wiki定义为一个资源,因此应该获得生成的路由函数,如wiki_path()等。我在上面的文章中读到,如果定义了路由函数,并且您传入了一个对象,那么它可以根据id计算出它是否响应了所有ActiveRecord类所使用的id方法 这是我的问题,我的Wiki类不是从ActiveRecord继承的,尽管我定义了下面的id函数,但路由器仍然将整个Wiki对象作为id参数传入 def id url_

所以在你说之前,我已经通读了这篇文章,而且我正在使用Rails 3.2.13

我在routes文件中将wiki定义为一个资源,因此应该获得生成的路由函数,如wiki_path()等。我在上面的文章中读到,如果定义了路由函数,并且您传入了一个对象,那么它可以根据id计算出它是否响应了所有ActiveRecord类所使用的id方法

这是我的问题,我的Wiki类不是从ActiveRecord继承的,尽管我定义了下面的id函数,但路由器仍然将整个Wiki对象作为id参数传入

def id 
  url_id = wiki.slug
  url_id ||= wiki.title
  url_id
end
我在尝试创建新wiki时遇到的错误如下:

ActionController::RoutingError at/wiki/生命的意义是什么

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"}>}
没有路由匹配{:action=>“show”,:controller=>“wiki”,
:id=>#“生命的意义是什么”}>}

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

您需要
to_param
方法,而不是
id

def to_param 
  wiki.slug || wiki.title
end

太棒了+1使用| | op.|使我的方法更优雅)