2012-05-07 58 views
2

我試圖得到一個基本的形式工作,很努力,因爲我不斷收到錯誤未定義的方法..._ index_path Ruby on Rails的

undefined method `profiles_index_path' for #<#<Class:0x4fe1ba8>:0x4fccda0> 

我已經通過檢查,似乎無法工作了我錯了。

在我看來(new.html.erb)我有:

<%= form_for @profile do |f| %> 

<%= f.text_field :name %> 
<%= f.text_field :city %> 
<%= f.text_field :country %> 
<%= f.text_field :about %> 

<%= f.submit "Create Profile" %> 

<% end %> 

在我的配置控制器我有:

class ProfilesController < ApplicationController 

def new 
    @title = "New Profile" 
    @profile = Profiles.new 
end 

def create 
    @user = current_user 
    @profile = @user.profiles.new(params[:profile]) 
    if @profile.save 
    redirect_to profile_path, :notice => "Welcome to your new profile!" 
    else 
    render "profiles#new" 
    end 
end 

def edit 
    @user = current_user 
    @profile = @user.profiles.find(params[:id]) 
end 

def update 
    @title = "Update Profile" 

    @user = current_user 
    @profile = @user.profiles.find(params[:id]) 

    if @profile.update_attributes(params[:profile]) 
    redirect_to profile_path 
    else 
    render action: "edit" 
    end 
end 

def index 
    @user = current_user 
    @profile = @user.profiles.all 
    @title = "Profile" 
end 

end 
在我的配置模型

最後我有

class Profiles < ActiveRecord::Base 

belongs_to :user 

end 

任何人可以提供的幫助真的很感激,因爲我很難過。 :)

對不起忘了,包括路線:

controller :profiles do 
    get "newprofile" => "profiles#new" 
    get "updateprofile" => "profiles#update" 
    get "profile" => "profiles#home" 
    end 

    resources :profiles, :controller => 'profiles' 
+0

做'rake routes'來檢查'index'方法的正確路徑 – Bongs

+0

你的'routes.rb'文件是什麼樣的? – Soup

+0

嘿,我已經添加了我的相關路線文件,以便您可以看到我擁有的路線。該視圖也稱爲new.html.erb,因爲它用於創建新配置文件。謝謝 –

回答

4

問題確實是你使用複數型號名稱的方式。不要這樣做。它應該是Profile,而不是Profiles。我有一些工作可以讓你使用複數模型名稱,但答案是堅持Rails約定而不是與框架對抗。將您的模型重命名爲Profileurl_for助手將瞭解如何正確將一個新的Profile對象轉換爲/profiles URL。

+0

驚人的這似乎工作!感謝您的幫助。 ,控制器=複數是那些總是軌道規則? –

+1

是的。你的模型應該總是單數,控制器應該總是複數。 – meagar

1

如果你運行「耙路線」命令,做「profiles_index」出現在你的路線?通常對於模型的索引頁,工作「索引」被省略了,因此路線profiles_path

你的錯誤可能來自你使用過的profiles_index_path代替profiles_path

+0

感謝您的回覆。該視圖文件被稱爲new.html.erb,因爲它用於創建新的配置文件 - 知道我需要更改以解決此問題是非常好的。再次感謝:) –

+0

您在new.html.erb中沒有使用'profiles_index_path',或者您沒有發佈所有代碼。我認爲問題不在於這個觀點。 – gabitzish

+0

奇怪是不是!這是所有的代碼,在任何時候我都沒有參考profiles_index_path - 但錯誤是暗示我在form_for的開頭行嗎?我想加載的網址是localhost:3000/newprofile –

0

視圖您是否嘗試過用下面的代碼替換你的form_for標籤?

<%= form_for @profile, :as => :post do |f| %> 

它看起來像試圖將它視爲GET請求「/ profile」。而且,由於它沒有找到索引操作,因此它會出現。我認爲強迫它做POST會解決這個問題。

+0

嘿,抱歉忘了包括。該視圖文件被稱爲new.html.erb - 任何進一步的幫助,你可以提供將不勝感激。 :) –

+0

我編輯了我的答案。希望這個作品! –

+0

嘿Yosep,謝謝你的幫助。可悲的是我仍然得到相同的錯誤,但是:(真的不知道爲什麼它變得困惑! –

1

我認爲這是失敗的,因爲沒有遵循你的型號名稱。

所以我認爲你的問題主要在於你沒有遵循關於模型名稱的慣例,因爲每個例子代表一個簡檔,所以典型地是單數。我認爲form_for helper試圖找出如何處理它,並因此而失敗。所以你有兩個選擇來嘗試和解決。將模型名稱重構爲單數(我不清楚這是多麼困難)或將URL參數傳遞給form_for,以便它知道要發佈到哪裏。

<% form_for @profile, :url => path_to_create_action do |f| %> 

更多信息這裏:

+0

嗨DVG,這是當我去../newprofile(這應該是配置文件#根據我的路線)。 –

+0

如果將'resources:profiles,:controller =>'profiles''移動到其他路徑的上方,會發生什麼情況? – DVG

+0

即使將資源移動到路徑文件的頂部也會出現同樣的錯誤。我的模型名稱是複數, @profile is asular as as the call in form_for。cheers –

0

我與Rails的5工作,我得到了同樣的錯誤,它用這個詞作爲Media我的模型是具體和RoR的使用Medium爲複數,所以我在執行rake routes時有不同的路線。

我做了什麼來解決它:

  1. 刪除我剛剛創建的模型。

    rails d scaffold Media 
    
  2. 編輯config/initializers/inflections.rb有:

    ActiveSupport::Inflector.inflections(:en) do |inflect| 
        # Here you can put the singular and plural form you expect 
        inflect.irregular 'media', 'medias' 
    end 
    
  3. 現在再次執行該支架:

    rails g scaffold Media 
    

現在,你必須在你所期望的方式應有盡有。因爲你已覆蓋複數形式的Singularizations(屈折)在Ruby中 on Rails的。

我希望這可能會有用。

相關問題