2011-09-09 12 views
1

私はRails3の初心者ですが、私は奇妙な問題を抱えています。 googleとStackOverflowでしばらく検索した後、私は自分の質問を書き留めることにしました。未定義のメソッドunexisting_url

私はCompetenciaモデルとPartidaモデルを持っています。 Competencia has_many :partidasおよびPartidas belongs_to :competencia

- 私は、ネストされたリソースでの作業と私のコードは次のようになります。

routes.rbを

resources :competencias do 
    resources :partidas 
end 

partidas_controller.rb

class PartidasController < ApplicationController 
    def new 
    @competencia = Competencia.find(params[:competencia_id]) 
    @partida = @competencia.partidas.build 
    end 

    def create 
    @competencia = Competencia.find(params[:competencia_id]) 
    @partida = @competencia.partidas.build(params[:partida]) 
    if @partida.save then #blabla end 
    end 
end 

ビュー/ partidas /new.html.erb

<%= form_for [@competencia, @partida], :url => competencia_partidas_path(@competencia) do |f| %> 
    <!--blabla--> 
<% end %> 

は、私はそれが(特別に - 私は、カスタムアクションを使用していない場合)form_forヘルパーでURLを指定するための正しい方法をisn'tことを知っているが、それは、私はそれを仕事ができる唯一の方法でした。私はこのような何かを書いたとき、私はルートを確認

Showing /Users/ks/rails/projects/chronos/app/views/partidas/new.html.erb where line #4 raised: 

undefined method `competencium_partidas_path' for #<#<Class:0x00000101718548>:0x00000101713728> 

(すくいルート)すべてがうまくなるようだ:<%= form_for [@competencia, @partida] do |f| %> I'veはこのエラーを得ました。

competencia_partidas GET /competencias/:competencia_id/partidas(.:format)   {:action=>"index", :controller=>"partidas"} 
        POST /competencias/:competencia_id/partidas(.:format)   {:action=>"create", :controller=>"partidas"} 
new_competencia_partida GET /competencias/:competencia_id/partidas/new(.:format)  {:action=>"new", :controller=>"partidas"} 

competencium名前はどこから来た誰かが私に説明できます?。これを解決する正しい方法は何でしょうか?

答えて

0

Railsは複数化のための英語の文法規則を前提としています。詳細はhttp://api.rubyonrails.org/classes/ActiveSupport/Inflector.htmlをご覧ください。インフレクタをカスタマイズしたり、英語のモデル名を使用することができます。私はイタリア語で、プロジェクトがイタリアの顧客のためのものであっても、私は英語の名前を使うことを好みます。

0

Railsはあなたのモデル名を特殊化しようとします。あなたの場合、competenciaはラテン語の複数形だと思います。例外を追加するには、config/initializers/inflections.rbに以下を入力してください:

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.singular "competencia", "competencia" 
end 
+0

私はインフレクターについてさらに読むことになり、また私の名前を英語に切り替えることを検討します。迅速な回答をいただきありがとうございます。それは非常に有用だった、私はより多くの情報を研究することができます。 – Kerlos