2

我可能在做一些愚蠢的事情,但是......

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

class User < ActiveRecord::Base
has_one :totem

配置/路由.rb:

resources :users do
    resource :totem
end

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

class TotemsController < ApplicationController

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

    def new
        @totem = @user.build_totem
    end

end

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

<%= form_for [@user, @totem] do |f| %>
<% end %>

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

ActionView::Template::Error (undefined method `user_totems_path' for #<#<Class:0x007f9d3c843b00>:0x007f9d3bb6dd68>):

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

4

4 回答 4

6

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

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

class Totem < ActiveRecord::Base
    model_name.instance_variable_set :@route_key, 'totem'
    belongs_to :user
end

(不知道为什么这个问答没有出现在我之前的搜索中......)

于 2013-05-31T05:21:03.093 回答
1

或者你可以使用

form_for @totem, :url => user_totem_path(@user) do |f|
于 2013-05-31T05:53:35.137 回答
0

代替

resource :totem

它应该是

resources :totem 
于 2013-05-31T04:33:38.577 回答
0

我也想不通为什么。我用这种方式(提供一个url to form_for)来绕过这个问题

<%= form_for [@user, @totem], :as => :totem, :url => user_totem_path do |f| %>

此外,谷歌的一些研究发现在早期的 Rails 中有一个错误报告。但我不确定它是否在最新的导轨中得到修复。如果您想进行更多研究,请点击此处的链接

https://rails.lighthouseapp.com/projects/8994/tickets/267

于 2013-05-31T06:18:42.917 回答