Ruby on Rails 3分层链接程序

时间:2016-03-08 05:39:52

标签: ruby-on-rails

  

我的应用是一个网络论坛。根页面是用户提交的列表   类别。我点击一个,它链接到用户提交的帖子列表   关于那个类别。我点击了一个帖子,它链接到评论列表   关于那篇文章。这些是3层。

类别索引 这是可点击类别的列表

<% @categories.each do |category| %>
<%= link_to category.title, category %>
<% end %>

enter image description here

类别展示 我点击了一个类别,现在我在这里查看帖子列表

<%= render :partial => @category.posts %>
<% end %>

_POSTS 这些帖子是从这里提取的

<%= div_for(post) do %>
<%= link_to post.body, Post  %>

enter image description here

点击该帖子链接会转到 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"

我成功将帖子添加到了类别中。如何在帖子中添加评论?我的方法是否正确?

1 个答案:

答案 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