Using Jquery Raty in Rails 4 and Displaying Average Star Rating
I have a Rails application in which I am using the jquery Raty plugin. I have included Raty in the gemfile
gem 'jquery-raty-rails', github: 'bmc/jquery-raty-rails'
and in application.js I have included
//= require jquery.raty
//= require jquery.raty.min
and i have included this in javascript
$('#star-log').raty({
target : '#hint-log',
targetType : 'score',
targetKeep : true
});
$('#star-comm').raty({
target : '#hint-comm',
targetType : 'score',
targetKeep : true
});
$('#star-tech').raty({
target : '#hint-tech',
targetType : 'score',
targetKeep : true
});
$('#star-overall').raty({
target : '#hint-overall',
targetType : 'score',
targetKeep : true,
readOnly : true
});
view for star rating is listed as
<div class="row">
<div class=" col s12 m6 logical">
<label>Logical & Analytical Skills</label>
<div id="star-log" > </div>
<%= f.text_field :log_skill, :id=>'hint-log' %>
</div>
<div class=" col s12 m6">
<label>Communication skills</label>
<div id="star-comm" ></div>
<%= f.text_field :comm_skill, :id=>'hint-comm' %>
</div>
</div>
<div class="row">
<div class=" col s12 m6">
<label>Technical Skills</label>
<div id="star-tech" id="star-tech"></div>
<%= f.text_field :log_skill, :id=>'hint-tech' %>
</div>
<div class="col s12 m6">
<label >Overall Rating</label>
<div id="star-overall" id="star-read"></div>
<%= f.text_field :log_skill, :id=>'hint-overall' %>
</div>
</div>
I have 4 fields for star rating which are listed as
- Logic and analytical skills
- communication skills
- technical skills
- general skill
so now in the first three star rate the user will rate and on these ratings the overall skill (which is read only) will be updated during the rating, or we can say that the overall skill rating will be the average of the first three skills and it will be automatically refreshes and keeps showing stars How can I do this?
+3
source to share
1 answer
Add class stars to a group of 3 star ratings
<div class="row">
<div class=" col s12 m6 logical">
<label>Logical & Analytical Skills</label>
<div id="star-log" class="stars" > </div>
<%= f.text_field :log_skill, :id=>'hint-log' %>
</div>
<div class=" col s12 m6">
<label>Communication skills</label>
<div id="star-comm" class="stars" ></div>
<%= f.text_field :comm_skill, :id=>'hint-comm' %>
</div>
</div>
<div class="row">
<div class=" col s12 m6">
<label>Technical Skills</label>
<div id="star-tech" class="stars"></div>
<%= f.text_field :log_skill, :id=>'hint-tech' %>
</div>
<div class="col s12 m6">
<label >Overall Rating</label>
<div id="star-overall"></div>
<%= f.text_field :log_skill, :id=>'hint-overall' %>
</div>
</div>
Removed double identifier assigned to the last star rating (star technique and allowance)
$('#star-log').raty({
target : '#hint-log',
targetType : 'score',
targetKeep : true
});
$('#star-comm').raty({
target : '#hint-comm',
targetType : 'score',
targetKeep : true
});
$('#star-tech').raty({
target : '#hint-tech',
targetType : 'score',
targetKeep : true
});
$('#star-overall').raty({
target : '#hint-overall',
targetType : 'score',
targetKeep : true,
readOnly : true
});
$(document).on("click", ".stars", function(){
var score = 0 ;
//loop through stars to get score
$('.stars').each(function(i, obj) {
//if score is there will be undefined if star not selected
if ($(obj).raty('score'))
score += $(obj).raty('score');
});
//calculating average
score = score / $(".stars").length;
$('#star-overall').raty({score: score });
$("#hint-overall").val(score.toFixed(2));
});
+3
source to share