rails 3中的单例资源和控制器

时间:2011-05-05 15:51:35

标签: ruby-on-rails-3 rest resources singleton

我正在尝试建立一个单身人士资源,我可能喝了太多咖啡。这是交易。已经创建了所有合适的支架,我在路线文件中有这个:

resources :users do
  resource :hat
end

...基于用户has_one:hat和帽子belongs_to:user。

运行rake路线并且可以看到所有正确的RESTful路线但是当我去的时候,例如, / users / 2 / hat,控制器borks并告诉我它找不到没有ID的帽子。我的印象是单身资源本质上否定了在查找器中对ID的需求,因为它是单一资源。

任何想法还是咖啡?

1 个答案:

答案 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