私は部分ビューのコントローラをレンダリングするビューの代わりに使用しようとしています。私のシナリオは以下の通りです。代わりにパーシャルビューコントローラを使用する
私はユーザーがおり、ユーザーは何かを投稿できます。それで私は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ガイドでは、パーシャルとそれをレンダリングするビューとの間に関係がある場合、レールはわれわれが何をしたいかを理解し、パーシャルビューのコントローラを代わりに使用するように指示します。私はここに何かを逃していますか
これでコントローラーを修正するようになったようですが、次のコードの** PostsController#create **で 'id' = 'のユーザーを見つけることができませんでした。' @user = User.find(params [:user_id ]) ' – Nerzid
でも、** user#index **で' @post = Post.new'の初期化を行うのは間違っていませんか? – Nerzid
それは間違っていません。 urlとメソッドを指定することもできますが、@postを使用するのは大丈夫です。 For:user_idあなたはフォームと共にparamを渡す必要があります... –