2016-08-01 11 views
0

私はRailsアプリケーションを作成しています。私のビューの1つで機能し、足場を使わずにテーブルにデータを送信するフォームが必要です。私は通常やる)。私のルートファイル内のリソースにもかかわらず、ルートが[POST]と一致しません "

ここで、このコメントフォームが表示される場所は、blogフォルダ内の1つのビューです。ユーザーがコメントを入力してテーブルに保存してから、同じページに戻る必要があります。

これはかなり一般的なエラーですが、フォームのルートファイルにリソースを作成し、次にコントローラーでcreateメソッドを使用するという2つの事柄を指定しているので、混乱します。 blog.html.erb

、これはこのフォームで起こる:私が望んでいたとして、その後

<%= form_for :cements do |f| %> 
      <div class="form-group"> 
       <div class="field"> 
        <%= f.label :post %><br> 
        <%= f.text_area :post, class: "form-control" %> 
       </div> 
      </div> 

      <h5 id="username">Username</h5> 
      <div class="form-group"> 
       <div class="field"> 
        <%= f.text_field :username, class: "form-control" %> 
       </div> 
      </div> 

      <%= f.hidden_field :slug, :id => "hiddenPicker"%> 

    <div class="actions"> 
     <%= f.submit "Save", class: "btn btn-success-outline" %> 
    </div> 
<% end %> 

、私のコントローラでは、私は、元のページに戻ってリダイレクトする必要があります作成する方法を持っています。

blogs_controller.rb

class BlogsController < ActionController::Base 

    def index 
     @posts = Post.order('updated_at DESC').all 
     @comments = Cement.all 
    end 

    def blog 
     @posts = Post.where(slug: params[:id]).all 
     @comments = Cement.all 
    end 

    def create 
     @cements= Cement.new(story_params) 
     @cements.save 
     redirect_to(:back) 
    end 

    private 

    def story_params 
     params.require(:cements).permit(:username, :post, :slug) 
    end 

end 

グッドニュース:コメントフォームは、ビューでレンダリングします。悪いニュース:私が提出するとき、私はこのエラーを受け取ります:ルートは[POST] "/ blog"と一致しません。

これは私のルートファイルの問題です。しかし、私はそこにすでにresources方法があります:投稿 リソース:

Rails.application.routes.drawは リソースを行う 資源をセメント:ブログ

命名規則は、私のコントローラファイルと同じです私はなぜこのエラーが起こっているのか混乱しています。何か案は?

+0

どのように ':セメント'を初期化しましたか?あなたのルートにもアクションブログを定義してください。 'リソース:ブログは 'blog'を取得します:on::collection end' – mrvncaragay

答えて

1

:cementはオブジェクトではなく、symbolなので、どのようにレールが決定され、POSTが形成されるのですか?あなたのフォームを調べると、フォームaction/blog(現在のページのURL)と表示されます。

あなたは

<%= form_for :cements, url: cements_path do |f| %> 

または

<%= form_for Cement.new do |f| %> 

上記CementsControllercreateアクションに提出する/cements、としてフォームのアクションを生成します両方の、しかし、私はあなたのケースで見あなたがしたいですかなければならないのいずれかそれをBlogsControllerに提出し、適切なルート(blogs_path)を使用してください。 2番目のバージョンでもurlを使用できます。

+1

偉大な答えは、あまりにも背景に感謝します。 – darkginger

関連する問題