我发布了'has_many'评论和评论'belongs_to'公告关系的公告。 在我的根上,我正在显示每个循环的公告,我尝试在每个新闻下发表评论form_for。
我的root_path操作:
def home
@announcements = Announcement.page(params[:page]).order('id DESC')
end
这是我的公告圈:
<% @announcements.each do |announcement| %>
.
.
.
<div class="create_comment form-inline">
<%= form_for(announcement.comments.build) do |form| %>
<%= form.label :author, "Autor:" %>
<%= form.text_field :author, class: "form_control" %>
<%= form.label :content, "Treść:" %>
<%= form.text_field :content, class: "form_control" %>
<%= form.submit "Dodaj!", class: "btn btn-primary", url: comments_path %>
<% end %>
</div>
</div>
<% end %>
以下是我的评论创建行动:
def create
@announcement = Announcement.find(params[:comment_id])
@comment = @announcement.comments.new(comments_params)
if @comment.save
flash[:success] = "Komentarz dodano"
redirect_to root_path
else
render 'static_pages/home'
end
end
private
def comments_params
params.require(:comment).permit(:author,:content)
end
但是我收到错误:找不到没有ID的公告
我知道我可以使用hidden_field并将其传递给comments_params,但这不是安全的解决方案。
我刚刚开始我的Rails冒险,所以如果有人知道我的错误在哪里,请尝试做出完整的解释。
答案 0 :(得分:0)
在@notulysses的帮助下,我做到了解决方案。
需要做出改变:
首先在routes.rb中:注释需要嵌套在公告中,才能正确加入。
resources :announcements, only: [:new,:create,:update,:edit,:destroy,:show] do
resources :comments, only: [:create, :destroy]
end
在comments_controller中的第二个公告应该通过announcement_params找到:
@announcement = Announcement.find(params[:announcement_id])
并且通过第三个(这是我的部分:)),我需要正确设置form_for属性。
form_for(announcement.comments.create, url: announcement_comments_path(announcement.id) )
它需要url:param,因为root在不同的控制器中然后是注释。
Yupi !!!!