7

基本的なフォームを機能させようとしていますが、エラーが発生し続けるため苦労しています

 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'
4

5 に答える 5

6

問題は、実際にモデル名を複数形にした方法です。そうしないでください。Profileではなく、 である必要がありProfilesます。複数形のモデル名を使用できるようにするためのいくつかの回避策がありますが、答えは、フレームワークと戦うのではなく、Rails の慣例に固執することです。モデルの名前を に変更するProfileと、ヘルパーは新しい Profile オブジェクトをURLurl_forに正しく変換する方法を理解します。/profiles

于 2012-05-07T20:08:24.570 に答える
1

「rakeroutes」コマンドを実行すると、「profiles_index」がルートに表示されますか?通常、モデルのインデックスページでは、作業「インデックス」が省略されているため、ルートは次のようになります。profiles_path

profiles_index_pathエラーはおそらく、代わりに使用したビューから発生しますprofiles_path

于 2012-05-07T18:14:25.663 に答える
1

モデル名が慣習に従っていないために失敗していると思います。

したがって、各インスタンスは1つのプロファイルを表すため、モデル名の規則に従っていないことが主な問題であると思います。これは、古典的には単数形です。form_for ヘルパーは、何をすべきかを理解しようとしていて、結果として失敗していると思います。したがって、試して解決するには2つのオプションがあります。モデル名を単数形にリファクタリングするか (それがどれほど難しいか正確にはわかりません)、:url パラメーターを form_for に渡して、投稿先がわかるようにします。

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

詳細はこちら:

于 2012-05-07T19:42:35.557 に答える
0

form_forタグを次のものに置き換えようとしましたか?

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

「/profile」へのGETリクエストとして処理しようとしているようです。そして、インデックスアクションが見つからないため、クラップスになります。POSTを強制すると、この問題は修正されると思います。

于 2012-05-07T18:14:58.040 に答える