1

我試圖爲我的應用程序添加一個簡單的星級評分系統,其中以this tutorial爲例。我有用戶,酒店和評分模型。依賴關係:Ruby on Rails:無法實現星級評分系統

(rating.rb)

belongs_to :user 
    belongs_to :hotel 

(hotel.rb)&(user.rb)

has_many :ratings 

而且,隨着酒店查看下面的代碼我得到這個錯誤:

NameError in Hotels#show

undefined local variable or method `user' for Class...

(與<%=的form_for線 ...)

酒店查看(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 
+0

你能給我們留下其他的錯誤信息嗎? – steel

+0

當然, > NameError在酒店#顯示 顯示/home/mks/rails_projects/hotels/app/views/hotels/show.html.erb其中行#33上升: 未定義的局部變量或方法'用戶'爲# <#:0xb6314e74> –

+0

在哪一行發生該錯誤? – Pavan

回答

0

上find_or_create_by一些搜索後,我改變了符合 '的form_for' 到

<%= form_for @hotel.ratings.find_or_create_by(user_id: user_id) 

這解決了問題!

感謝各位的支持!

0

從評論中,錯誤似乎在這裏:

@hotel.ratings.find_or_create_by_user_id user.id 

-

USER_ID

的問題是你的show視圖沒有進入所謂的user

一個局部變量這個變量要麼在controller定義(這意味着它必須是@instance variable,或者應該是幫手(如current_user.id

因此

此修復程序應該如下:

<% user_id = user_signed_in? ? current_user.id : "-1" %> 

<%= form_for @hotel.ratings.find_or_create_by_user_id user_id ... 

這應該得到它爲你工作與您所提供的代碼。由於您尚未提供控制器的new操作,因此我不知道代碼的支持結構是否正確。

+0

現在它是>>未定義的方法'find_or_create_by_user_id'爲 #

+0

好吧!那麼你想用這個做什麼?你爲什麼不直接在'Review'模型本身上調用該方法? –

+1

將此行更改爲:<%= form_for @ hotel.ratings.find_or_create_by(user_id:user_id)解決了此問題。感謝您的幫助!!! –