首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >form_for嵌套资源(单数)未使用正确的路径帮助器

form_for嵌套资源(单数)未使用正确的路径帮助器
EN

Stack Overflow用户
提问于 2013-05-31 12:28:07
回答 4查看 1.7K关注 0票数 2

我可能是在做傻事,但是...

app/model/user.rb:

代码语言:javascript
复制
class User < ActiveRecord::Base
has_one :totem

config/routes.rb:

代码语言:javascript
复制
resources :users do
    resource :totem
end

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

代码语言:javascript
复制
class TotemsController < ApplicationController

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

    def new
        @totem = @user.build_totem
    end

end

app/views/totems/new.html.erb:

代码语言:javascript
复制
<%= form_for [@user, @totem] do |f| %>
<% end %>

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

代码语言:javascript
复制
ActionView::Template::Error (undefined method `user_totems_path' for #<#<Class:0x007f9d3c843b00>:0x007f9d3bb6dd68>):

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-31 13:21:03

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

app/models/totem.rb:

代码语言:javascript
复制
class Totem < ActiveRecord::Base
    model_name.instance_variable_set :@route_key, 'totem'
    belongs_to :user
end

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

票数 6
EN

Stack Overflow用户

发布于 2013-05-31 13:53:35

或者你可以直接使用

代码语言:javascript
复制
form_for @totem, :url => user_totem_path(@user) do |f|
票数 1
EN

Stack Overflow用户

发布于 2013-05-31 12:33:39

而不是

代码语言:javascript
复制
resource :totem

它应该是

代码语言:javascript
复制
resources :totem 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16849772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档