我正在尝试建立一个单身人士资源,我可能喝了太多咖啡。这是交易。已经创建了所有合适的支架,我在路线文件中有这个:
resources :users do
resource :hat
end
...基于用户has_one:hat和帽子belongs_to:user。
运行rake路线并且可以看到所有正确的RESTful路线但是当我去的时候,例如, / users / 2 / hat,控制器borks并告诉我它找不到没有ID的帽子。我的印象是单身资源本质上否定了在查找器中对ID的需求,因为它是单一资源。
任何想法还是咖啡?
答案 0 :(得分:2)
你有两个选择。如果你真的认为:帽子应该有一个单独的资源(并且只是拥有belongs_to关系并不意味着那个),那么我只希望你没有忘记创建HatController。
另一方面,您可能对额外的会员路线感到满意:
resources :users do
match :hat, :via => [:get, :post], :on => :member
end
在这种情况下,您需要在UsersController中执行“hat”操作。
您的代码可能会有所帮助。
修改
我自己测试过,假设是正确的,并且有效:
>curl http://localhost:3000/users/1/hat
<!DOCTYPE html>
<html>
<head>
<title>Utest</title>
<link href="/stylesheets/scaffold.css?1304678667" media="screen" rel="stylesheet" type="text/css" />
<script src="/javascripts/prototype.js?1304678590" type="text/javascript"></script>
<script src="/javascripts/effects.js?1304678590" type="text/javascript"></script>
<script src="/javascripts/dragdrop.js?1304678590" type="text/javascript"></script>
<script src="/javascripts/controls.js?1304678590" type="text/javascript"></script>
<script src="/javascripts/rails.js?1304678590" type="text/javascript"></script>
<script src="/javascripts/application.js?1304678590" type="text/javascript"></script>
<meta name="csrf-param" content="authenticity_token"/>
<meta name="csrf-token" content="6RvaQqHxYGFih2vh+3UmHJnqYPfVh/dqdpkLwva6Yko="/>
</head>
<body>
HatController#Show
<a href="/users/1/hat">Self</a>
</body>
</html>
在我的情况下,我只需要为控制器强制使用单数形式,但这可能是我的错误:
resources :users do
resource :hat, :controller => :hat
end