学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

【学習5.0】【MacOSX】レビューフォーム

「app\views」フォルダに「reviews」フォルダを新規作成して下さい。
作成した「reviews」フォルダに「_form.html.erb」ファイルを新規作成します。



app\views\reviews\_form.html.erb(新規作成したファイル)

<%= form_for([@project, @review]) do |f| %>
	<div id="user_stars"></div>
	<%= f.text_field :comment %>

	<%= f.hidden_field :project_id, :value => @project.id %>
    <%= f.hidden_field :user_id, :value => current_user.id %>

	<div class="actions">
		<%= f.submit "レビューする", class: "button is-danger is-fullwidth m-t-10 m-b-10" %>
	</div>
<% end %>


<script>
	$('#user_stars').raty({
		path: '/assets',
		scoreName: 'review[star]',
		score: 1
	});
</script>



「app\views\reviews」フォルダに「_index.html.erb」ファイルを新規作成します。


app\views\reviews\_index.html.erb(新規作成したファイル)

<% if @reviews.blank? %>
	<span class="center"><h4>まだレビューはありません。</h4></span>
<% end %>

<% @reviews.order("id desc").each do |r| %>
	<hr>
	<div class="row">

		<div class="col m1">
        <figure class="image is-32x32">
            <%= image_tag r.user.gravatar_url, class: "is-rounded" %><br/>
            </figure>
		</div>

		<div class="col m10">
			<div>
				<strong><%= r.user.full_name %></strong>
				<span class="right"><%= r.created_at %></span>
			</div>
			<div id="stars_<%= r.id %>"></div>
			<div><%= r.comment %></div>
            <br/>
			<div>
				<%= link_to "削除", [@project, r], class: "button is-danger", method: :delete, data: {confirm: "本当によろしいですか?"} if current_user && current_user.id == r.user.id %>
			</div>

		</div>
	</div>
	<script>
		$('#stars_<%= r.id %>').raty({
			path: '/assets',
			readOnly: true,
			score: <%= r.star %>
		});
	</script>

<% end %>



「app\views\project\show.html.erb」ファイルに以下の記述を追加します。


1.記述追加 app\views\project\show.html.erb(42~53行目)

<!--レビュー-->
<div class="box">
    <span id="average_rating"></span>
    <p>レビュー(<%= @reviews.count %>)</p>
    <br/>
    <%= render 'reviews/index' %>
    <hr/>

    <article class="media">
        <div class="card-content">
            <div><%= render 'reviews/form' if @joined && !@hasReview %></div>
        </div>

    </article>
</div>



2.記述追加 app\views\project\show.html.erb(158~164行目)

<!-- レビュー jQuery Raty-->
<script>
	$('#average_rating').raty({
		path: '/assets',
		readOnly: true,
		score: <%= @project.average_rating %>
	});
</script>



app\views\project\show.html.erb

<section class="section">
    <div class="container">
        <div class="columns">
        
            <!-- 左側 -->
            <div class="column is-two-thirds">
                <div class="columns is-multiline">
                    <!-- プロジェクト -->
                    <div class="column is-full">   
                        <div class="card">
                            <div class="card-content">
                                <div class="content">
                                    <h1 class="title"><%= @project.name %></h1>
                                    <div class="title is-4 has-text-right" style="color: black;"><%= number_to_currency(@project.price) %></div>
                                </div>
                                <hr>
                                <div class="hero-carousel" id="carousel-photo">
                                    <%= image_tag @project.image %>
                                </div>
                            </div>
                        </div>
                    </div>
                    
                    <div class="column">
                        <div class="card">
                            <div class="card-content">

                                <!-- コンテンツ -->
                                <div class="box">
                                    <article class="media">
                                        <div class="media-content">
                                            <div class="content">
                                                <h2 class="subtitle">このプランについて</h2>
                                                <hr>
                                                <%= @project.content %>
                                            </div>
                                        </div>
                                    </article>
                                </div>

                                <!--レビュー-->
                                <div class="box">
                                    <span id="average_rating"></span>
                                    <p>レビュー(<%= @reviews.count %>)</p>
                                    <br/>
                                    <%= render 'reviews/index' %>
                                    <hr/>
                                    <article class="media">
                                        <div class="card-content">
                                            <div><%= render 'reviews/form' if @joined && !@hasReview %></div>
                                        </div>
                                    </article>
                                </div>

                                <!-- タスク Section -->
                                <div class="box">
                                    <article class="media">
                                        <div class="media-content">
                                            <div class="content">
                                                <div class="collection">
                                                    <% @tasks.each do |task| %>
                                                        <% if task.header %>
                                                            <br/>
                                                            <div class="collection-item active">
                                                                <span class="tag is-link is-large"> <%= task.title %></span>
                                                                <span class="tag is-white is-large"> <%= task.note %></span>
                                                            </div>
                                                            <br/>
                                                        <% else %>
                                                            <div class="collection-item active">
                                                                &nbsp;&nbsp;&nbsp;&nbsp;<span class="tag is-light is-medium" style="margin: 3px;">
                                                                    <%= link_to [task.project, task], class: "collection-item", data: { turbolinks: false} do %>
                                                                        <%= task.title %>
                                                                    <% end %>                                                                
                                                                 </span>
                                                                
                                                            </div>                            
                                                        <% end %>
                                                    <% end %>
                                                </div>
                                            </div>
                                        </div>
                                    </article>
                                </div>
 
                            </div>
                        </div>                        
                    </div>
                </div>
            </div>

            <!-- 右側 -->
            <div class="column">
                <div class="columns is-multiline">

                    <!-- 購入 -->
                    <div class="column is-full">
                        <div class="card">
                            <div class="card-content">
                                <div class="media">
                                    <div class="media-content">
                                        <strong><%= @project.name %></strong>                                                                                                        
                                    </div>
                                    <div class="media-right">
                                        <p class="title is-4" style="color: black;"><%= number_to_currency(@project.price) %></p>
                                    </div>                                                
                                </div>
                                
                                <div class="content f-15">
                                    <p class="m-t-30"><%= @project.content %></p>
                                    <p class="m-t-30">
                                        <strong>タスク数: <i class="far fa-clock"></i> <%= @tasks.count %></strong>                                                    
                                    </p>
                                </div>
                                <% if user_signed_in? %>

                                    <!-- サブスクリプション -->
                                    <% if !@joined %>
                                        <div class="center">
                                            <h1 class="tag is-success is-light is-large"><%= @project.price == 0? "無料" : "有料" %></h1>
                                        </div>
                                        <br/>
                                        <div class="card-action center">
                                                <%= form_tag free_path do %>
                                                    <%= hidden_field_tag 'project_id', @project.id %>
                                                    <button type="submit" class="button is-fullwidth is-danger">プロジェクトを購入する(<%= number_to_currency(@project.price) %></button>
                                                <% end %>
                                        </div>
                                    <% else %>
                                        <div class="card-content center">
                                            <span class="tag is-success is-light is-large">購入済みです</span>
                                        </div>
                                        <div class="card-content center">
                                            <div class="card-content is-horizontal-center is-flex">
                                                <figure class="image is-256x256">
                                                    <%= image_tag current_user.gravatar_url, class: "is-rounded" %><br/>
                                                </figure>
                                        </div>
                                        <h5><%= current_user.full_name %></h5>
                                        </div>
                                    <% end %>                                

                                <% else %>
                                    <button class="button is-fullwidth is-danger" disabled>ログインして下さい</button>  
                                <% end %>
                            </div>
                        </div>
                    </div>
                   
                </div>
            </div>
            
        </div>
    </div>
</section>

<!-- レビュー jQuery Raty-->
<script>
	$('#average_rating').raty({
		path: '/assets',
		readOnly: true,
		score: <%= @project.average_rating %>
	});
</script>



ブラウザ確認
http://localhost:3000/project/1


プロジェクトを購入している場合、レビューフォームが表示されます。

レビューフォーム
レビューフォーム



星をつけてレビューを投稿できます。

レビュー成功
レビュー成功