我可能做了些蠢事,但是......
应用程序/模型/ 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
。为什么不尝试使用正确的路径助手?
答案 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| %>
此外,谷歌的一些研究发现早期的铁轨中有一个错误报告。但我不确定它是否已在最新的轨道中修复。如果您想进行更多研究,可以使用以下链接