form_for嵌套资源(单数)不使用正确的路径助手

aid*_*dan 2 ruby ruby-on-rails ruby-on-rails-3

我可能做了一些愚蠢的事,但......

应用程序/模型/ user.rb:

class User < ActiveRecord::Base
has_one :totem
Run Code Online (Sandbox Code Playgroud)

配置/ routes.rb文件:

resources :users do
    resource :totem
end
Run Code Online (Sandbox Code Playgroud)

应用程序/控制器/ totems_controller.rb:

class TotemsController < ApplicationController

    before_filter do
        @user = User.find(params[:user_id])
    end

    def new
        @totem = @user.build_totem
    end

end
Run Code Online (Sandbox Code Playgroud)

应用程序/视图/图腾/ new.html.erb:

<%= form_for [@user, @totem] do |f| %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

然后,当我导航到时/users/123/totem/new,我收到错误:

ActionView::Template::Error (undefined method `user_totems_path' for #<#<Class:0x007f9d3c843b00>:0x007f9d3bb6dd68>):
Run Code Online (Sandbox Code Playgroud)

但是因为我使用resource :totem而不是resources :totems在routes.rb中,它应该使用的路径助手是user_totem_path.为什么不尝试使用正确的路径助手?

aid*_*dan 6

在另一个问题中找到了我的答案:Ruby on rails:singular resource和form_for

应用程序/模型/ totem.rb:

class Totem < ActiveRecord::Base
    model_name.instance_variable_set :@route_key, 'totem'
    belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

(不确定为什么这个Q&A没有出现在我之前的搜索中......)