2017-02-28 36 views
1

私は部分ビューのコントローラをレンダリングするビューの代わりに使用しようとしています。私のシナリオは以下の通りです。代わりにパーシャルビューコントローラを使用する

私はユーザーがおり、ユーザーは何かを投稿できます。それで私は2つのコントローラーとモデル(ユーザーと投稿)を持っています。

ユーザーのページには、コンテンツの入力と投稿用のボタンがあるテキストエリアがあります。私はこのビューを書いた.../views/posts/_new.html.erb部分ビューとして、私は部分.../views/users/index.html.erbと私はこのコードを使用しました。

<%= render 'posts/new' %> 

投稿を作成するために、このメソッドを作成しました。

posts_controller.rb

def new 
    @post = Post.new 
    end 

    def edit 
    @post = Post.find(params[:id]) 
    end 

    def create 
    @user = User.find(params[:user_id]) 
    @post = @user.posts.create(post_params) 

    if @post.save 
     redirect_to root_path 
    else 
     render 'new' 
    end 
    end 

... /ビュー/記事/ _new.html.erb

<%= form_for :post do |f| %> 
      <%= f.text_area :content, :class => "form-control", "rows" => "5", "id" => "comment", "placeholder" => "Write something to share with your mates ..." %><br/> 
      <%= button_tag "Share", :class => "btn btn-primary pull-right" do %> 
      <span class="glyphicon glyphicon-share-alt"></span> 
      <% end %> 
     <% end %> 

ここでの問題は、私は部分的にボタンをクリックしたときに、あります表示、それはに行くユーザー#RegistrationControllerのdeviseコントローラ。どうして ?

Hereガイドでは、パーシャルとそれをレンダリングするビューとの間に関係がある場合、レールはわれわれが何をしたいかを理解し、パーシャルビューのコントローラを代わりに使用するように指示します。私はここに何かを逃していますか

答えて

1

のようなフォームをより明確にする..

<%= form_for @post do |f| %> 

をし、中@post初期化あなたのユーザー#インデックスコントローラの動作は

@post = Post.new 

問題は、現在のソリューションではフォームに明示的なURLとメソッドが与えられていないため、そのフォームで投稿を作成することがわかりません。

+0

これでコントローラーを修正するようになったようですが、次のコードの** PostsController#create **で 'id' = 'のユーザーを見つけることができませんでした。' @user = User.find(params [:user_id ]) ' – Nerzid

+0

でも、** user#index **で' @post = Post.new'の初期化を行うのは間違っていませんか? – Nerzid

+0

それは間違っていません。 urlとメソッドを指定することもできますが、@postを使用するのは大丈夫です。 For:user_idあなたはフォームと共にparamを渡す必要があります... –

0

button_tag

<%= form_for :post do |f| %> 
     <%= f.text_area :content, :class => "form-control", "rows" => "5", "id" => "comment", "placeholder" => "Write something to share with your mates ..." %><br/> 
     <%= button_tag "Share", :type => "submit", :class => "btn btn-primary pull-right" do %> 
     <span class="glyphicon glyphicon-share-alt"></span> 
     <% end %> 
    <% end %> 

:type => 'submit'を追加または変更button_tagf.buttonこの

 <%= f.button :submit, :class => "btn btn-primary pull-right" do %> 
     <span class="glyphicon glyphicon-share-alt"></span> 
     <% end %> 
+0

これは何も変更されません。既に送信ボタンです。 – Nerzid

関連する問題