Ruby on Rails:无法实现星级系统 [英] Ruby on Rails: Can't implement Star Rating system

查看:113
本文介绍了Ruby on Rails:无法实现星级系统的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为我的应用添加一个简单的星级系统,这个系统采用了本教程为例。我有用户,酒店和评级模型。依赖关系是:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆