2011-09-09 188 views
1

我是一個Rails3的新手,我有一個奇怪的問題。在Google和StackOverflow中搜索了一段時間後,我決定寫下我的問題。未定義的方法unexisting_url

我有一個CompetenciaPartida模型。 Competencia has_many :partidas和Partidas belongs_to :competencia

I'm嵌套資源的工作和我的代碼如下所示:

的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 

的意見/編法/new.html.erb

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

我知道這isn't指定在form_for助手的URL正確的方式(特別是如果我可不是使用自定義操作),但它只是我可以工作的出路。當我寫了這樣的事情:<%= form_for [@competencia, @partida] do |f| %>從來就得到這個錯誤:

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> 

當我檢查了線路(耙路線)似乎一切都很好。

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試圖單化你的模型名稱。在你的情況下,它認爲competencia是一個拉丁詞的複數。要添加例外,請將以下內容放入config/initializers/inflections.rb

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

太棒了!我會閱讀更多關於inflectors,並會考慮將我的名字換成英文。非常感謝您的快速回答。這非常有用,我可以研究更多信息。 – Kerlos