2016-09-19 4 views
0

ユーザーのプロフィールページにテキストエリアを表示して投稿を作成しようとしています。現時点ではユーザーの投稿をすべて見ることができますが、フォームが表示されないためプロフィールページにアクセスできません。Rails:投稿のユーザーform_forが機能しない

いくつかのものを変更しようとしましたが、ルーティングエラーのためにフォームが投稿されませんでした。

私は誤った経路に投稿しているように感じますが、私はそうとアドバイスをいただければ幸いです。

class PostsController < ApplicationController 

def index 
    @posts = Post.all 
end 

def new 
    @post = Post.new 
end 

def create 
    @post = current_user.posts.build(post_params) 
    if @post.save 
     flash[:success] = "Posted!" 
     redirect_to root_url 
    else 
     flash[:notice] = "Post could not be submitted" 
     redirect_to users_path 
    end 
end 

private 

def post_params 
    params.require(:post).permit(:user_id, :content) 
end 
end 

_post_form.html.erb 

<%= form_for :post, user_posts_path, {method: "create"} do |f| %> 
<%= f.text_area :content, size: "60x12", placeholder: "What do you want to say?" %> 
<%= f.submit "Post" %> 
<% end %>  
+0

フォームがレンダリングされないと言うと、エラーメッセージが表示されますか? –

+0

このエラーが発生しました:{:action => "index"、:controller => "posts"、:id => "8"}必要なキーがありません:[:user_id]それとどこの必要なキー:user_idがどこからくるのですか? –

+0

あなたはどのようにユーザIDをコントローラに渡していますか? URLを介して? –

答えて

0

すくいルートをチェックして、私はあなたがroutes.eb

ので

<%= form_for :post, user_posts_path(@user), html: { method: "post"} do |f| %> 

resources :users do 
    resources :posts 
end 

を提供すると考えてください。コントローラ内

、あなたはこれに代えて、あなたのform_forに記載の方法を変更する必要がcreateと呼ばれるそのようなHTTP動詞はありません

def new 
    @post = Post.new 
    @user = current_user 
end 
0

<%= form_for :post, user_posts_path, {method: "create"} do |f| %> 

これを試してみてください。

<%= form_for :post, user_posts_path, {method: "post"} do |f| %> 
+0

に "メソッド"を定義する必要はありません。このエラーで終わります:ルートは一致しません{:action => "index"、:controller => "posts" id => "4"}必要なキーがありません:[:user_id] –

+0

@HarryB。あなたのルートを修正する必要があります。 – Surya

+0

は入れ子にしてはいけません:投稿リソースはそのトリックですか?私はそれを修正する方法がわかりません –

関連する問題