0

Rails(3.1.3)のRuby(1.9.3-p0)でアプリを作成していますが、オブジェクトの作成に使用しているリモートフォームで問題が発生しています。フォームは、divに配置するリモートリンクによってビューに読み込まれます(newアクション内。フォームにもリモートのラベルが付いていますが、送信すると、POSTリクエストはindexアクションではなくアクションによって処理されcreateます。なぜこれが発生するのですか?RailscreateはベースルートのPOSTリクエストに対してコントローラーのアクションを自動的に使用するべきではありませんか?関連するコードとメッセージは次のとおりです。

フォームをロードするビューのリモートリンクは次のとおりです。

<div id="new_higher_education_study">
<%= link_to "Nuevo Estudio Superior", new_higher_education_study_path, :remote => true %>
</div>

これらすべての要求を処理するコントローラーは次のとおりです。

class HigherEducationStudiesController < ApplicationController

def new
    @higher_education_study = HigherEducationStudy.new

    respond_to do |format|
        format.js
    end
end

def create
    @study = HigherEducationStudy.new(params[:higher_education_study])
    @higher_education_studies = HigherEducationStudy.get_by_academic_background_id(UserSession.find.user.curriculum_vitae.academic_background_id)

    respond_to do |format|
        if @study.save
            flash[:notice] = "Se ha guardado el Estudio Superior exitosamente."
        else
            flash[:notice] = "Error en el guardado del Estudio Superior."
        end
        format.js
    end
end
end

次に、それぞれのビューは次のとおりです。

new.js.erb:

$('#new_higher_education_study').html("<%= escape_javascript(render :partial => 'higher_education_studies/higher_education_study_form' ) %>");

create.js.erb:

$('#higher_education_studies_table').html("<%= escape_javascript( render :partial => 'higher_education_studies_table') %>")

私のroutes.rbファイルでは、次のように、そのコントローラーのデフォルトのリソースでのみRailsを設定しています。resources :higher_education_studies, :except => [:index]

このrake routesコマンドは、ルートPOST'/higher_education_studies'がcreateアクションにリンクされていることを確認します。

               higher_education_studies POST   /higher_education_studies(.:format)                    {:action=>"create", :controller=>"higher_education_studies"}
             new_higher_education_study GET    /higher_education_studies/new(.:format)                {:action=>"new", :controller=>"higher_education_studies"}
            edit_higher_education_study GET    /higher_education_studies/:id/edit(.:format)           {:action=>"edit", :controller=>"higher_education_studies"}
                 higher_education_study GET    /higher_education_studies/:id(.:format)                {:action=>"show", :controller=>"higher_education_studies"}
                                        PUT    /higher_education_studies/:id(.:format)                {:action=>"update", :controller=>"higher_education_studies"}
                                        DELETE /higher_education_studies/:id(.:format)                {:action=>"destroy", :controller=>"higher_education_studies"}

そのため、フォームを送信すると、サーバーコンソールに次のように表示される理由がわかりません。

Started POST "/higher_education_studies" for 127.0.0.1 at 2012-04-10 11:12:53 -0300
Processing by HigherEducationStudiesController#index as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"a7kFXPfLvYEBwXurV6rn7apwuAE5p0mGoD5vMaHdcCE=", "higher_education_study"=>{"institution_id"=>"1", "institution"=>"", "degree"=>"law", "major"=>"asdf", "years_studied"=>"6", "status"=>"incomplete"}, "date"=>{"year"=>"2012"}, "commit"=>"Guardar"}
Completed 500 Internal Server Error in 13ms

ActionView::MissingTemplate (Missing template higher_education_studies/index, application/index with {:handlers=>[:erb, :builder, :coffee, :haml], :formats=>[:js, "application/ecmascript", "application/x-ecmascript", :html, :text, :js, :css, :ics, :csv, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json], :locale=>[:en, :en]}. Searched in: ...

ルートファイルに明示的に行を入れてみpost '/higher_education_studies', :to => 'higher_education_studies#create'ましたが、うまくいきませんでした。この問題について助けてくれてありがとう。

4

1 に答える 1

1

将来誰かが同様の問題を抱えた場合に備えて、routes.rb ファイルの別の部分がこの特定のコントローラーのルーティングを台無しにしていることが判明しました。多くの人がプロジェクトに取り組んでいるので、誰かが私のコントローラのリソースの前に私のものをキャッチするより一般的なルートを作ったのかもしれません. 今のところ、どちらが原因かは調べていませんresources :higher_education_studies。routes.rb ファイルのほぼ先頭に移動しただけで、動作するようになりました。

于 2012-04-11T12:55:02.107 に答える