2016-12-27 3 views
0

私はフォームから投稿を作成したいと思います。これは私がやったと何がこれまで働いていたものです:すべてのサイトに新しいフォームを投稿

ビュー

<%= form_for @post, url: {action: "create"}, html: { multipart: true } do |form| %> 
    <%= form.text_field :description %> 
    <%= form.file_field :image %> 
    <%= form.hidden_field :user_id, :value => current_user.id %> 
    <%= submit_tag"Post", class: "btn" %> 
<% end %> 

コントローラ

def new 
    @post = Post.new(params[:post]) 
end 

def create 
    @post = Post.create(post_params) 
    if @post.save 
    redirect_to @post 
    else 
    render :new 
    end 
end 

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

しかし、今、私は中に置かれるから、作成したいですlayouts/application.html.erbと各ルート/サイトからのアクセスが可能です。しかし、私の問題は、変数@postが見つからないということです。なぜなら、私はそれを投稿自身の新しい機能で解析するからです。どのようにこれを解決するための任意のアイデア?

答えて

2

以下のようにフォームを作成します: - :あなたは、私は、静的呼び出しで@post変数を置き換え見ることができるように

<%= form_for Post.new(params[:post]), url: { controller: "post", action: "create"}, html: { multipart: true } do |form| %> 

あなただけのビューの最初の行を編集しなければならなかった

<%= form_for Post.new, html: { multipart: true } do |form| %> 
    <%= form.text_field :description %> 
    <%= form.file_field :image %> 
    <%= form.hidden_field :user_id, :value => current_user.id %> 
    <%= submit_tag"Post", class: "btn" %> 
<% end %> 
+0

でそれを呼び出すことができます。私はこの質問を投稿してから10秒後に自分自身で解決策を見つけました:<%= form_for Post.new(params [:post])、url:{controller: "post"、action: "create"}、html:{ multipart:true} do | form | %> ' – Sylnois

+0

しかし、ありがとうございます:) – Sylnois

0

コントローラー属性を追加しました。

0

それとも、application_controllerであなたの@postを定義し、その後、私は少し速かったbefore_action

関連する問題