Ruby on Rails:无法实现星级系统 [英] Ruby on Rails: Can't implement Star Rating system
问题描述
我正在为我的应用添加一个简单的星级系统,这个系统采用了本教程为例。我有用户,酒店和评级模型。依赖关系是:
I'm trying to add a simple Star Rating system for my app having taken this tutorial for an example. I have User, Hotel and Rating models. Dependencies are:
(rating.rb)
(rating.rb)
belongs_to :user
belongs_to :hotel
(hotel.rb)& (user.rb)
(hotel.rb) & (user.rb)
has_many :ratings
在酒店视图中使用以下代码,我收到此错误:
And with the following code in hotel view I get this error:
酒店中的NameError#显示
NameError in Hotels#show
未定义的局部变量或方法`user'for Class ...
undefined local variable or method `user' for Class...
(与<%= form_for ...的一致)
酒店视图(显示。 html.erb):
Hotel view (show.html.erb):
<% form_id = "hotel_#{@hotel.id}_rating" %>
<% if signed_in? %> <!-- To avoid throwing an exception if no user is signed in -->
<% user_id = current_user.id %>
<% else %>
<% user_id = -1 %>
<% end %>
<%= form_for @hotel.ratings.find_or_create_by_user_id user.id,
:html => {:id => form_id,
:class => "star_rating_form"} do |f| %>
<%= f.hidden_field :hotel_id, :value => @hotel.id %>
<% if signed_in? %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<% end %>
<%= f.hidden_field :stars, :id => form_id + "_stars" %>
<% end %>
<% (1..5).each do |i| %>
<li class="rating_star" id="<%= form_id %>_<%= i %>" data-stars="<%= i %>" data-form-id="<%= form_id %>"></li>
<% end %>
评分控制器是:
def create
end
def update
end
def rating_params
params.require(:rating).permit(:stars)
end
迁移文件是:
create_table :ratings do |t|
t.integer :stars, :default => 0
t.references :store
t.references :user
end
推荐答案
在find_or_create_by上进行搜索后,我将form_for改为
After some search on find_or_create_by, I changed line with 'form_for' into
<%= form_for @hotel.ratings.find_or_create_by(user_id: user_id)
解决了这个问题!
感谢大家的支持!
这篇关于Ruby on Rails:无法实现星级系统的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!