渲染表单,并在同一页面上显示输入

时间:2015-06-21 20:06:21

标签: ruby-on-rails

所以我正在尝试创建一个视频游戏评论网站进行练习。每个游戏都有自己的页面,在每个页面上,我想要一个表单,您可以在其中输入评论,并在提交时将其显示在同一页面上。

我不知道如何处理这件事。但我设法创建了两个控制器 - 一个用于创建游戏,另一个用于创建评论。

我使用设计用户登录/注册

我将发布以下代码:如果您需要查看其他文件,请告诉我。

的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>

1 个答案:

答案 0 :(得分:0)

games_controller.rb中,您需要一个show方法(默认情况下,在您使用脚手架时创建,但您错过了它)。假设您的show模型引用其对应的Review模型(均作为{{1中指定的外键),此Game方法将收集与相关游戏相关的所有评论在他们各自的模型中通过schema.rbbelongs_to。)

show方法如下所示:

has_many

然后在你看来,你会有这样的事情:

def show
  @reviews = Review.where("game_id = ?", @game.id)
end

我不知道您的Review对象中包含哪些字段,但您可以从此示例中推断出您想要的内容。