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

时间:2013-05-31 04:28:07

标签: ruby-on-rails ruby ruby-on-rails-3

我可能做了些蠢事,但是......

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

class User < ActiveRecord::Base
has_one :totem

配置/ routes.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>):

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

4 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:1)

或者你可以使用

form_for @totem, :url => user_totem_path(@user) do |f|

答案 2 :(得分:0)

而不是

resource :totem

应该是

resources :totem 

答案 3 :(得分:0)

我无法弄清楚为什么。我用这种方式(提供form_for的URL)来绕过问题

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

此外,谷歌的一些研究发现早期的铁轨中有一个错误报告。但我不确定它是否已在最新的轨道中修复。如果您想进行更多研究,可以使用以下链接

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