0

楽しみと言語の学習のために Ruby でフォーラムを構築します。これを開始するには、基本的な構造を理解していますが、私はサーバー側言語に非常に慣れておらず、主にフロントエンド開発者です。スキルアップに努めています。

必ずしもあなたにコードを書いてもらいたいわけではありませんが (コード例はありがたいです)、なぜ私のコードがひどいのかを説明してもらいたいです。2 つのモデルを関連付ける方法と、コントローラーでその関係を設定する方法を理解するための助けが必要です。

ありがとう!

ここに私の2つのモデルがあります:

投稿モデル:

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

ビューが問題だとは思わないので、コントローラーのロジックを理解したら、新しい質問を投稿します。

繰り返しますが、助けていただければ幸いです。「最初からやり直したほうがいい」とか「経験が足りないので、まずこれを学んでください」などのコメントはやめてください。

それをどのようにコーディングするかを示すか、私に実装する必要があるロジックを説明していただければ幸いです!

みんなありがとう!

編集

実際にルーティングエラーが発生しています。したがって、明らかにルーティングが間違っています。コントローラーコードと関係があるかどうかはわかりませんでした。具体的なエラーは次のとおりです。(これは、トピックをクリックしようとしたときに発生します (トピックをクリックしないだけで、トピックを編集および破棄できます)

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
4

0 に答える 0