将帖子与ruby on rails论坛应用程序中的主题相关联(高级概述)



用ruby构建一个论坛,以获得乐趣并学习语言。首先,我了解基本结构,但我对服务器端语言非常陌生,主要是一名前端开发人员。我正在努力扩展我的技能。

我不一定希望你为我编写代码(尽管代码示例会很感激),但我希望你向我解释为什么我的代码很糟糕,我相信确实如此,并告诉我如何修复它。只需要一些帮助,了解如何将两个模型关联在一起,以及如何在控制器中建立这种关系。

谢谢!

这是我的两个型号:

后模型:

class Post < ActiveRecord::Base
    belongs_to :topic
end

主题模型:

class Topic < ActiveRecord::Base
    belongs_to :user
    has_many :posts
end

现在控制器来了。这些是我真正迷失的地方。我让主题创建工作起来了,我试着复制我在主题控制器中所做的事情。我很清楚这不会奏效,但我有点迷路了。给…

主题控制器

class TopicsController < ApplicationController
  def index
    @topics = Topic.order("sticky desc")
  end
  def show
    @topic = Topic.find(params[:id])
  end
  def new
    @topic = Topic.new
  end
  def create
    @topic = Topic.new(topic_params)
    @topic.user = current_user
    if @topic.save
      redirect_to @topic, notice: "Created topic."
    else
      render :new
    end
  end
  def edit
    @topic = Topic.find(params[:id])
  end
  def update
    @topic = Topic.find(params[:id])
    if @topic.update_attributes(topic_params)
      redirect_to topics_url, notice: "Updated topic."
    else
      render :edit
    end
  end
  def destroy
    @topic = Topic.find(params[:id])
    @topic.destroy
    redirect_to topics_url, notice: "Destroyed topic."
  end
private
  def topic_params
    params.require(:topic).permit(:name, :post_content, :sticky)
  end
end

张贴控制器

class PostsController < ApplicationController
  def index
    @posts = Post.order("sticky desc")
  end
  def show
    @post = Post.find(params[:id])
  end
  def new
    @post = Post.new
  end
  def create
    @post = Post.new(post_params)
    @post.user = current_user
    if @post.save
      redirect_to topics_url, notice: "Post created."
    else
      render :new
    end
  end
  def edit
    @post = Post.find(params[:id])
  end
  def update
    if @post = Post.find(params[:id])
      redirect_to topics_url, notice: "Updated post."
    else
      render :edit
    end
  end
  def destroy
    @post = Post.find(params[:id])
    @post.destroy
    redirect_to topics_url, notics: "Post removed."
  end
private
  def post_params
    params.require(:posts).permit(:content, :created_at, :updated_at)
  end
end

我不认为这些观点是一个问题,一旦我弄清楚控制器逻辑,我会发布一个新的问题。

再次感谢您的帮助。请不要发表诸如"你真的应该从头开始"或"你经验不够,先学这个"之类的评论,因为我知道我没有经验,所以我在这里问大家。

你可以展示你将如何编码它,或者只是向我解释需要实现的逻辑,两者都很感激!

非常感谢大家!

编辑

事实上,我遇到了一个路由错误。很明显,路由是错误的,不确定是否与控制器代码tho有关:这是具体的错误。(当我试图点击主题时会发生这种情况(我可以编辑和销毁主题,只是不能点击它们)

Routing Error
No route matches {:action=>"new", :controller=>"posts"}
Try running rake routes for more information on available routes.

这是我到目前为止的路线文件:

Forum::Application.routes.draw do

  get 'signup', to: 'users#new', as: 'signup'
  get 'login', to: 'sessions#new', as: 'login'
  get 'logout', to: 'sessions#destroy', as: 'logout'
  resources :sessions
  resources :topics do
    resources :posts
  end
  resources :users

  root to: 'topics#index'
end

Serve是一个基于机架的小型web服务器,它可以简单地从任何索引中为ERB或HAML提供服务。Serve是构建Rails应用程序HTML模型的最佳设备。如果引入合适的钻石,Serve同样可以处理SASS、Textile和Markdown。在此处输入图像描述

最新更新