フォームを使用して投稿を追加しています。現在のユーザーのIDをエントリパラメーターと一緒に送信する必要があります。これが私のフォームコードです:
<%= form_for [@topic, @post] do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field">
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :topic_id, :value => topic.id %>
<%= f.text_area :content, placeholder: "yorumunuzu girin..." %>
</div>
<%= f.submit "Gönder", class: "btn btn-large btn-primary" %>
<% end %>
と私のposts_controller:
def new
@topic= Topic.find_by_id(params[:id])
@post = @topic.posts.build(params[:post])
end
def show
@post= Post.find(params[:id])
@topic= @post.topic
end
def create
@topic= Topic.find_by_id(params[:id])
@post = @topic.posts.build(params[:post])
if @post.save
flash[:success] = "Konu oluşturuldu!"
redirect_to topic_path(topic)
else
render 'static_pages/home'
end
end
私はパーシャルを使用しているので、topic_controller.rbでこれらのコードを使用します
def show
@topic = Topic.find(params[:id])
@posts = @topic.posts.paginate(page: params[:page])
@post = @topic.posts.build if signed_in?
end
リソースをネストしました:
resources :users
resources :sessions, only: [:new, :create, :destroy]
resources :topics , only: [:show, :create, :destroy] do
resources :posts, only: [:create, :show, :new]
end
。コメントを投稿すると、エラーログは次のようになります。
{"utf8"=>"✓",
"authenticity_token"=>"y0wzskqK9LfXSPIYW4EmqRii1Tg7bD1CG0kno+gcagQ=",
"post"=>{"user_id"=>"1",
"content"=>"yeni yorum"},
"commit"=>"Gönder",
"topic_id"=>"3"}
したがって、投稿しませんtopic_id
。トピック表示ページでは、トピック、それに属する投稿、投稿フォームを表示したいと思います。そして、ユーザーがコメントを投稿したときに、同じページにリダイレクトしたいのですredirect_to topic_path(topic)
が、正しいか間違っていますか?読んでくれてありがとう。
編集1:私は以下の解決策を試しました。私が変更され
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :topic_id, :value => @post.topic.id %>
エラーコードが変更されました
undefined method `posts' for nil:NilClass
{"utf8"=>"✓",
"authenticity_token"=>"y0wzskqK9LfXSPIYW4EmqRii1Tg7bD1CG0kno+gcagQ=",
"post"=>{"user_id"=>"1",
"topic_id"=>"3",
"content"=>"yorum"},
"commit"=>"Gönder",
"topic_id"=>"3"}
新しいアクションを編集する必要があります。私の心は立ち往生していますが、私はあきらめません。