0

Railsアプリケーションを作っています。ユーザーが登録した後 (devise で既にユーザー登録を作成しています)、プロファイル情報を含むこのフォームに入力できます。フォームは、情報コントローラーの作成アクションに投稿要求を送信する必要がありますが、何らかの理由でルートを適切に構成できません。フォームの送信先である informations#create の rake routes を実行すると、空白のパスが表示されます。informations#index もありますが、これは私が推測しているものです。パスが空白の場合、フォームを informations#create に移動するにはどうすればよいですか? 私はこれを数回行いましたが、何が間違っているのかわかりません。モデルは次のとおりです。

class Information < ActiveRecord::Base
    belongs_to :user
end

コントローラーは次のとおりです。

class InformationsController < ApplicationController

    def new
        @information = Information.new
    end
    def create
        @information = Information.create(params[:information])
        redirect_to student_path
    end
    def index
    end
end

そして、これが新しいアクションのビューです。

<div class="span6 offset3 text-center">
<h1>Edit your information</h1>

    <%= simple_form_for @information do |f| %>
        <%= f.input :skills %>


        <%= f.input :looking_for, :label => 'What help do you need?' %>
        <%= f.input :my_idea %>
        <%= submit_tag "Save", :class => "btn btn-primary btn-large" %>
    <% end %>
</div>

ルートファイルの行は次のとおりです。

resources :informations

次のエラーが表示されます。

#<#:0x007f9c00c7b3e0> の未定義のメソッド `information_index_path'

ファイルのレーキルートは次のとおりです

 informations GET    /informations(.:format)          informations#index
             POST   /informations(.:format)          informations#create

フォームを表示するページを読み込もうとしたときの完全なスタックトレースは次のとおりです。

Started GET "/informations/new" for 127.0.0.1 at 2013-10-21 17:25:09 -0400
Processing by InformationsController#new as HTML
  Rendered informations/new.html.erb within layouts/application (64.2ms)
Completed 500 Internal Server Error in 70ms

ActionView::Template::Error (undefined method `information_index_path' for #<#<Class:0x007ff03e8b34a0>:0x007ff03e8b23e8>):
    2:  <div class="span6 offset3 text-center">
    3:  <h1>Edit your information</h1>
    4: 
    5:      <% simple_form_for @information do |f| %>
    6:          <%= f.input :skills %>
    7:          
    8:          
  app/views/informations/new.html.erb:5:in `_app_views_informations_new_html_erb__3172218935119285240_70334909089600'


  Rendered /usr/local/rvm/gems/ruby-2.0.0-p247@firehose/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.0ms)
  Rendered /usr/local/rvm/gems/ruby-2.0.0-p247@firehose/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.7ms)
  Rendered /usr/local/rvm/gems/ruby-2.0.0-p247@firehose/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (9.1ms)


Started GET "/informations/new" for 127.0.0.1 at 2013-10-21 17:25:09 -0400
Processing by InformationsController#new as HTML
  Rendered informations/new.html.erb within layouts/application (8.3ms)
Completed 500 Internal Server Error in 13ms

ActionView::Template::Error (undefined method `information_index_path' for #<#<Class:0x007ff03e8b34a0>:0x007ff03e8708a8>):
    2:  <div class="span6 offset3 text-center">
    3:  <h1>Edit your information</h1>
    4: 
    5:      <% simple_form_for @information do |f| %>
    6:          <%= f.input :skills %>
    7:          
    8:          
  app/views/informations/new.html.erb:5:in `_app_views_informations_new_html_erb__3172218935119285240_70334908978600'


  Rendered /usr/local/rvm/gems/ruby-2.0.0-p247@firehose/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.0ms)
  Rendered /usr/local/rvm/gems/ruby-2.0.0-p247@firehose/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.3ms)
  Rendered /usr/local/rvm/gems/ruby-2.0.0-p247@firehose/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (14.0ms)
4

3 に答える 3

0

これが役立つかどうかはわかりませんが、simple_form_for の前に = を追加してみてください。<% ではなく <%= になるように

于 2013-10-21T22:25:23.013 に答える
0

フォームは 1 つの情報オブジェクト用である必要があります。情報オブジェクトのコレクションではありません。simple_form_for @informationsに変更したことに注意してくださいsimple_form_for @information

<div class="span6 offset3 text-center">
<h1>Edit your information</h1>

    <% simple_form_for @information do |f| %>
        <%= f.input :skills %>


        <%= f.input :looking_for, :label => 'What help do you need?' %>
        <%= f.input :my_idea %>
        <%= submit_tag "Save", :class => "btn btn-primary btn-large" %>
    <% end %>
</div>

また、レールが information_index_path を生成しなかったことが原因ではありません。information#index の名前付きルートが であるためですinformations_path。オブジェクトのコレクションを使用しているため、パスが間違って生成されます。

于 2013-10-21T21:11:08.723 に答える