"index"} user_foos POST /users/:user_id/foo(.:format) -6ren">
gpt4 book ai didi

routing - Rails 3 has_one 路由

转载 作者:行者123 更新时间:2023-12-04 01:29:57 24 4
gpt4 key购买 nike

我有两个类(class):

class User < ActiveRecord::Base
:has_one :foo
end

class Foo < ActiveRecord::Base
:belongs_to :user
end

Foo 是可选的。

我创建了以下路由:
resources :users do
resources :foo
end

这导致以下路线:
GET    /users/:user_id/foo(.:format)              {:controller=>"foos", :action=>"index"}
user_foos POST /users/:user_id/foo(.:format) {:controller=>"foos", :action=>"create"}
new_user_foo GET /users/:user_id/foo/new(.:format) {:controller=>"foos", :action=>"new"}
GET /users/:user_id/foo/:id(.:format) {:controller=>"foos", :action=>"show"}
PUT /users/:user_id/foo/:id(.:format) {:controller=>"foos", :action=>"update"}
user_foo DELETE /users/:user_id/foo/:id(.:format) {:controller=>"foos", :action=>"destroy"}
edit_user_foo GET /users/:user_id/foo/:id/edit(.:format) {:controller=>"foos", :action=>"edit"}

问题:
  • 似乎 Index 和 Show 操作是多余的。是否应该删除其中之一?如果有,是哪一个?
  • Show 操作中的 :id 参数似乎没有必要,因为 user_id 是 foos 表中的外键,并且每个用户只有一个 foo。我错了吗?
  • 如果没有 foo,我想要一种优雅的方式来路由到 New 操作。一种选择是测试@user.foo.nil?在 FooController 的 Show 或 Index 操作中,然后重定向到 New 操作。有没有更好的办法?

  • 谢谢你的时间。

    最佳答案

    如果您的模型具有 has_one 关联,请尝试使用 resource :foo 设置路由(注意单数方法名称“资源”,而不是“资源”)。这将设置一个单例资源路由(例如,它没有索引操作,成员操作没有 id 参数,因为只有一个成员)。另见 http://apidock.com/rails/ActionController/Resources/resource (2.3 文档,但适用于 3.0 以及 afaik)。

    关于routing - Rails 3 has_one 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3346116/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com