所以我正在尝试创建一个视频游戏评论网站进行练习。每个游戏都有自己的页面,在每个页面上,我想要一个表单,您可以在其中输入评论,并在提交时将其显示在同一页面上。
我不知道如何处理这件事。但我设法创建了两个控制器 - 一个用于创建游戏,另一个用于创建评论。
我使用设计用户登录/注册
我将发布以下代码:如果您需要查看其他文件,请告诉我。
的routes.rb
Rails.application.routes.draw do
devise_for :users
resources :games
resources :reviews
root "games#index"
end
games_controller.rb - 创建新游戏
class GamesController < ApplicationController
before_action :set_game, only: [:show, :edit, :update, :destroy]
def index
@games = Game.all
end
def new
@game = Game.new
end
def create
@game = Game.create(game_params)
redirect_to @game
end
def edit
end
def update
@game.update(game_params)
redirect_to @game
end
def destroy
end
private
def game_params
params.require(:game).permit(:title, :image, :developer, :genre, :release_date, :platform)
end
def set_game
@game = Game.find(params[:id])
end
end
reviews_controller.rb - 创建评论
class ReviewsController < ApplicationController
before_action :set_review, only: [:show, :edit, :update, :destroy]
def index
end
def show
end
def new
@review = Review.new
end
def create
@review = Review.create(review_params)
redirect_to @review
end
private
def review_params
params.require(:review).permit(:review)
end
def set_review
@review = Review.find(params[:id])
end
end
游戏的show.html.erb
<% if user_signed_in? %>
<p class=""><%= link_to "Update Details", edit_game_path %></p>
<p class=""><%= link_to "Update News", new_game_path %></p>
<% end %>
<%= flash[:notice] = "Successfully updated." %>
<hr>
<div class="game_summary">
<%= image_tag @game.image %>
<div class="game_details">
<h3 class="game_title"><%= @game.title %></h3>
<ul class="game_info">
<li>Developer: <%= @game.developer %></li>
<li>Release Date: <%= @game.release_date %></li>
<li>Genre: <%= @game.genre %></li>
<li>Platform(s): <%= @game.platform %></li>
</ul>
<button class="buttons" id="buy">Buy</button>
<button class="buttons" id="rent">Rent</button>
</div>
</div>
<div class="game_news">
<h2 class="game_news_title">News & Articles</h2>
</div>
<div class="game_reviews">
<%= link_to "Add Review", new_review_path %>
<h2>Reviews</h2>
<ul>
<li><%= %></li>
<li><%= %></li>
<li><%= %></li>
<li><%= %></li>
</ul>
</div>
答案 0 :(得分:0)
在games_controller.rb
中,您需要一个show
方法(默认情况下,在您使用脚手架时创建,但您错过了它)。假设您的show
模型引用其对应的Review
模型(均作为{{1中指定的外键),此Game
方法将收集与相关游戏相关的所有评论在他们各自的模型中通过schema.rb
和belongs_to
。)
show方法如下所示:
has_many
然后在你看来,你会有这样的事情:
def show
@reviews = Review.where("game_id = ?", @game.id)
end
我不知道您的Review对象中包含哪些字段,但您可以从此示例中推断出您想要的内容。