2

バカなことをしているのかもしれませんが…

アプリ/モデル/user.rb:

class User < ActiveRecord::Base
has_one :totem

config/routes.rb:

resources :users do
    resource :totem
end

app/controllers/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.rbresource :totemの代わりに使用しているためresources :totems、使用すべきパス ヘルパーはuser_totem_path. 正しいパスヘルパーを使用しようとしないのはなぜですか?

4

4 に答える 4

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&A が表示されなかった理由がわかりません...)

于 2013-05-31T05:21:03.093 に答える
1

または、単に使用できます

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

私も理由がわかりませんでした。この方法(form_forにURLを提供する)を使用して問題を回避しました

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

また、Google の調査によると、以前のレールにバグ レポートがあることがわかりました。しかし、最新のレールで修正されているかどうかはわかりません。さらに研究をしたい場合は、ここにリンクがあります

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

于 2013-05-31T06:18:42.917 に答える
0

それ以外の

resource :totem

そのはず

resources :totem 
于 2013-05-31T04:33:38.577 に答える