我正在使用表单添加帖子,并且需要将当前用户的 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"}
我必须编辑我的新动作。我的心被卡住了,但我不会放弃。