我的应用是一个网络论坛。根页面是用户提交的列表 类别。我点击一个,它链接到用户提交的帖子列表 关于那个类别。我点击了一个帖子,它链接到评论列表 关于那篇文章。这些是3层。
类别索引 这是可点击类别的列表
<% @categories.each do |category| %>
<%= link_to category.title, category %>
<% end %>
类别展示 我点击了一个类别,现在我在这里查看帖子列表
<%= render :partial => @category.posts %>
<% end %>
_POSTS 这些帖子是从这里提取的
<%= div_for(post) do %>
<%= link_to post.body, Post %>
点击该帖子链接会转到 POSTS INDEX 。
我不确定这是否是Rails应用程序的理想流程。这看起来很奇怪 使用Categories_Index从Categories,Posts到Comments, Categories_Show和Posts_Index分别。我不知道如何显示或提交此POSTS INDEX的评论。 @ comments.each做|评论|提供错误,render:partial方法也是如此。我不能对我用于分类和帖子的评论使用相同的方法。
模型 模型包含has_many,belongs_to等。
类别控制器 def指数 @categories = Category.all 结束 def创建 @category = current_user.categories.build(categories_params) 端
POSTS CONTROLLER def创建 @category = Category.find(params [:category_id]) @post = @ category.posts.new(post_params)
评论控制器 def指数 @subcomments = Subcomment.all 结束 def创建 @subcomment = current_user.subcomments.build(subcomment_params) 端
路线
Rails.application.routes.draw do
resources :comments
resources :posts
devise_for :users
resources :categories do
resources :posts do
end
resources :comments
end
root "categories#index"
我成功将帖子添加到了类别中。如何在帖子中添加评论?我的方法是否正确?
答案 0 :(得分:0)
我假设您有以下模型关系:
模型类别
has_many :posts
模特帖子
has_many :comments
belongs_to :category
模型评论
belongs_to :post
您在询问&#34; 如何在帖子中添加评论?&#34;
在您呈现所有 POSTS 数据的页面中, 您应 USE 发布 ID 作为主要参数。
因此,意味着您应该在 评论表 中包含 post_id 列/字段。
保存评论数据后,通常喜欢[标题,消息,日期....]。
在 Post Controller 中,您可以获得以下评论:
// multiple Posts data
@posts = Post.all
@post.each do |post|
post.comments
...
end
//single Post
@post = Post.first // or Post.find(:id => params[:post_id])
@post.comments
如果您使用表单发送数据,只需输入一些隐藏文本字段,
设置名称&amp;值强>:
name="post_id"
// or something like:
name="comment[:post_id]"
//depends on how you constract the form.
然后设置值:
value="<%= params[:post_id ]%>"
最后,您可以获得其他 comments_field名称的价值。
通常你应该在 config / routes.rb 中有这个,
resources :commets
然后您的 FORM路径就像:
<%= form_for @comment, :url => @comments_path %>
您的评论控制器应该具有:
def index
...
end
def show
...
end
def edit
...
end
def new
@comment = Comment.new
end
def create
@comment = Comment.create(comment_params)
if @comment.save
....
redirect_to comments_path
else
.....
end
end
# For params permit in Rails 4 ^
def comment_params
params.require(:comment).permit!
end