我正在嘗試向一個小應用程式添加一個非常簡單的評分系統。我有一個電影模型和一個收視率模型。一個分級屬于一部電影,而一部電影有_許多分級。我想要一個簡單的功能,有 5 個帶星星的按鈕,每個按鈕都應該為具有相應值 (1-5) 的特定電影創建一個新評級
我將它們放在一個按鈕組中,如下所示:
<div class="btn-group me-2 flexbox-item-4">
<%= button_to "*",{:controller => "ratings", :action => "create", :movie_id => @movie.id, :value => 1} , :method=>:post, class:"btn btn-outline-warning" %>
<%= button_to "*",{:controller => "ratings", :action => "create", :movie_id => @movie.id, :value => 2} , :method=>:post, class:"btn btn-outline-warning" %>
<%= button_to "*",{:controller => "ratings", :action => "create", :movie_id => @movie.id, :value => 3} , :method=>:post, class:"btn btn-outline-warning" %>
<%= button_to "*",{:controller => "ratings", :action => "create", :movie_id => @movie.id, :value => 4} , :method=>:post, class:"btn btn-outline-warning" %>
<%= button_to "*",{:controller => "ratings", :action => "create", :movie_id => @movie.id, :value => 5} , :method=>:post, class:"btn btn-outline-warning" %>
</div>
這并沒有洗掉任何錯誤,所以我認為它有效,并繼續嘗試在我的 _movie 部分中添加一個“平均評級”部分,該部分在顯示視圖中呈現。
我試過這個:
<p>
<strong>Hodnocení:</strong>
<%= movie.ratings.average(:value) %>
</p>
它仍然是空白的。
我的 rating_cotroller.rb:
class RatingsController < ApplicationController
before_action :find_movie
def new
@rating = Rating.new
end
def create
@rating = Rating.new(rating_params)
@rating.movie_id = @movie.id
end
private
def rating_params
params.permit(:value)
end
def find_movie
@movie = Movie.find(params[:movie_id])
end
end
關于為什么它是空白的任何想法?我的代碼的某些部分是錯誤的還是我遺漏了什么?
uj5u.com熱心網友回復:
我想你忘了保存它。
def create
@rating = Rating.new(rating_params)
@rating.movie_id = @movie.id
@rating.save
end
uj5u.com熱心網友回復:
到目前為止,一切看起來都不錯,但是您可以創建審查模型的實體,這意味著它是臨時的并存盤在 ram 上,當您離開控制器時,垃圾收集器將收集它并將其從記憶體中洗掉,您將失去進度!
Review.new 不會對資料庫執行任何操作。
你可以做的是 Review.create(your data) 或 review = Review.new(your data) 然后處理你想要的,而不是 review.save
呼叫 Save() 方法時,會命中資料庫并將實體存盤在 db 中,而 Create() 方法直接命中資料庫,您不必呼叫 save 方法將資料保存在 db 中。而已。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/421030.html
標籤:
