jquery - Ruby On Rails - 访问 JQuery 中的 current_user 属性
问题描述
我制作了餐厅指南,并且正在实施星级评分系统。到目前为止一切都很好,但现在我在 JQuery 部分遇到了困难,该部分包含当前用户为餐厅投票的星数。下面是相关代码:
架构 --------------
create_table "ratings", force: :cascade do |t|
t.integer "star"
t.integer "restaurant_id"
t.integer "user_id"
end
楷模 - - - - - - - - - - - - -
餐厅型号:
class Restaurant < ApplicationRecord
has_many :ratings
end
评级模型:
class Rating < ApplicationRecord
belongs_to :restaurant
belongs_to :user
end
用户型号:
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :ratings
end
控制器--------
收视率控制器
class RatingsController < ApplicationController
def create
@restaurant = Restaurant.find(params[:restaurant_id])
@rating = @restaurant.ratings.create(params[:rating].permit(:star))
@rating.user = current_user
@rating.save
flash[:notice] = 'Obrigado pelo seu voto!'
redirect_to restaurant_path(@restaurant)
end
end
HTML --------------
<ul class="rating pl-0">
<% form_id = "restaurant_#{@restaurant.id}_rating" %>
<%= form_for([@restaurant, @restaurant.ratings.build], :html => {:id => "restaurant_#{@restaurant.id}_rating", :class => "star_rating_form"}) do |f| %>
<%= f.hidden_field :restaurant_id %>
<%= f.hidden_field :star, :id => "#{form_id}_stars" %>
<% end %>
<% (1..5).each do |i| %>
<li class="rating_star mx-1 pb-4 pt-1" data-stars="<%= i %>" data-form-id="<%= form_id %>" id="<%= "#{form_id}_#{i}" %>"></li>
<% end %>
</ul>
JQUERY ---------------
var set_stars = function(form_id, stars){
for(i=1; i<=5; i++){
if(i <= stars){
$('#' + form_id + '_' + i).addClass('on');
} else {
$('#' + form_id + '_' + i).removeClass('on');
}
}
}
$(function() {
$('.rating_star').click(function() {
var star = $(this);
var form_id = $(this).attr('data-form-id');
var stars = $(this).attr('data-stars');
set_stars(form_id, stars);
$('#' + form_id + '_stars').val(stars);
$.ajax({
type: "post",
url: $('#' + form_id).attr('action'),
data: $('#' + form_id).serialize()
});
});
<% if user_signed_in? %>
$('.star_rating_form').each(function(){
var form_id = $(this).attr('id');
var stars = <%= @restaurant.ratings.current_user ---- HERE'S THE PROBLEM ---- %>
set_stars(form_id, stars)
});
<% end %>
在 JQuery 代码的最后一部分(这是问题所在),我需要访问 current_user 投票的星数(如果存在)。我尝试了很多东西,如果我输入 <%= 4 %> 或 <%= @restaurant.ratings.count %> 只是为了看看它是不是别的东西,代码就可以工作。我需要访问类似@restaurant.ratings.stars.current_user
解决方案
在我问了这个问题几分钟后,我发现了一个非常简单的方法,叫做.find_by()
,我设法解决了这个问题。
下面是相关代码:
HTML --------------
<%= form_for([@restaurant, @restaurant.ratings.find_by(user: current_user) || @restaurant.ratings.build], :html => {:id => "restaurant_#{@restaurant.id}_rating", :class => "star_rating_form"}) do |f| %>
JQUERY --------------
<% if user_signed_in? %>
$('.star_rating_form').each(function(){
var form_id = $(this).attr('id');
var stars = $('#' + form_id + '_stars').val();
set_stars(form_id, stars)
});
<% end %>
希望这可以帮助某人。:)
推荐阅读
- python - Python - 带有 BeautifulSoup 的网络抓取 pubmed.gov 摘要 - 出现非类型错误
- machine-learning - 在多标签分类中拆分训练和测试以避免训练集中的数据丢失
- ms-word - 如何重新添加已删除的 VSTO 加载项
- python - 如何从 Spark 的 summary() 中排除百分位数
- python-3.x - Pool.Apply_Async 不会循环,ValueError: Pool not running
- python - 按日和月对数据进行排序(忽略年份)python pandas
- githooks - 未生成 Git 挂钩
- javascript - 放大时图形被隐藏(使用缩放滚动条)
- ionic4 - 如何在 Ionic 4 中“绘制其他应用程序”
- sql - 与 UNION 相比,INTERSECT 是否具有更高的优先级?