楽しみと言語の学習のために 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