- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现评级系统。通过 this tutorial
当我尝试给出评级时,我不断收到此错误:
Started PATCH "/ratings/7.json" for 127.0.0.1 at 2014-10-31 14:09:58 +0200
Processing by RatingsController#update as JSON
Parameters: {"utf8"=>"✓", "authenticity_token"=>"j/bCg3mFtQLl1n5qSZInNrUoKaRT/PKpzLnEz6QNGcQ=", "rating"=>{"book_id"=>"1", "user_id"=>"1", "stars"=>"4"}, "id"=>"7"}
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
Rating Load (0.2ms) SELECT "ratings".* FROM "ratings" WHERE "ratings"."id" = $1 LIMIT 1 [["id", 7]]
(0.1ms) BEGIN
(0.2ms) COMMIT
Book Load (0.2ms) SELECT "books".* FROM "books" WHERE "books"."id" = $1 LIMIT 1 [["id", 1]]
Rating Load (0.3ms) SELECT "ratings".* FROM "ratings" WHERE "ratings"."book_id" = $1 [["book_id", 1]]
Completed 500 Internal Server Error in 8ms
TypeError (nil can't be coerced into Float):
app/models/book.rb:30:in `+'
app/models/book.rb:30:in `block in avg_rating'
app/models/book.rb:29:in `avg_rating'
app/controllers/ratings_controller.rb:37:in `block (2 levels) in update'
app/controllers/ratings_controller.rb:35:in `update'
我的 show.html.erb View :
<% form_id = "book_#{@book.id}_rating" %>
<% if user_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 @book.ratings.find_or_create_by(user_id: user_id), :html => {:id => form_id, :class => "star_rating_form"} do |f| %>
<%= f.hidden_field :book_id, :value => @book.id %>
<% if user_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 %>
我的 ratings_controller.rb:
before_filter :js_logged_in
def create
@rating = Rating.new(rating_params)
@book = Book.find(params[:rating][:book_id])
respond_to do |format|
if @rating.save
format.json { render :json => { :avg_rating => @book.avg_rating } }
else
format.json { render :json => @rating.errors, :status => :unprocessable_entity }
end
end
end
def update
@rating = Rating.find(params[:id])
respond_to do |format|
if @rating.update_attributes(rating_params)
format.json { render :json => { :avg_rating => @rating.book.avg_rating } }
else
format.json { render :json => @rating.errors, :status => :unprocessable_entity }
end
end
end
def js_logged_in
if(!user_signed_in?)
flash[:error] = "You must be a signed in to leave a rating!"
render :js => "window.location = '/users/sign_in'"
end
end
private
def rating_params
params.require(:rating).permit(:book_id, :stars, :user_id)
end
我的book.rb模型:
def avg_rating
average_rating = 0.0
count = 0
ratings.each do |rating|
average_rating += rating.stars
count += 1
end
if count != 0
(average_rating / count)
else
count
end
end
我的 rating.rb 模型:
class Rating < ActiveRecord::Base
belongs_to :book
belongs_to :user
attr_accessor :stars
end
谁知道 - 为什么这不起作用?
最佳答案
您的评级的至少一个 stars
属性返回 nil
。因此,当您调用 average_rating += rating.stars
时(相当于 average_rating = average_rating + nil
),您会收到错误消息。如果此字段中的 nil
值表示 0
,您可能应该:
average_rating += rating.stars || 0
如果此字段中的nil
值不受欢迎,您应该在Rating
模型中对其进行验证:
validates_presence_of :stars
此外,由于 stars
是您的 ratings
表中的一个字段,您不需要 Rating< 中的
模型。 attr_accessor :stars
/
关于ruby-on-rails - TypeError (nil 不能被强制转换为 Float) :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26675001/
在检查对象是否为 nil 时,有人使用 1: if (object == nil) { //... } 有人用 2: if (nil == object) { //... } 1和2有
func InsertApData(w http.ResponseWriter, r *http.Request) { decoder := json.NewDecoder(r.Body)
为什么 nil.to_s 返回 "",而 nil.inspect 返回 "nil"(当显然 .inspect 使用 .to_s 方法) 最佳答案 "inspect" method of the Obj
运行时间 https://play.golang.org/p/sl12vfS9vP package main import "fmt" func main() { err := run()
我可以将三元条件运算符用于 if {} else {} 语句,如下所示:a ? x : y,还是问题?回答 1 : 回答 2。 是否可以使用这种格式来检查,而不是 a 是 true 还是 false,
无法弄清楚这里出了什么问题。按照设计设置说明,用谷歌搜索我能想到的一切,仍然没有运气。 undefined method `email' for # Extracted source (around
今天写一些 rspec 时,我遇到了一些意外的行为,将日期(和时间)实例与 nil 进行比较。这是一个使用原始 ruby 的示例(没有 Rails 或其他库): user@MacBook-Work
我将数据类型的非零值分配给非可选属性,然后将其分配给可选属性,最后用所述数据实例化图像。当可选项通过 if-let 子句时,它的 block 执行,抛出错误: Fatal error: Unexpec
swift 5.1 。 考虑以下。 let x: Any? = nil let y: Any = x print("x \(x)") // x nil pri
请耐心听我解释这一点, 我正在创建一个聊天室,用户可以在其中上传照片供其他人查看。当用户点击图标时,他们可以将照片上传到我的 Firebase 数据库(这已成功完成,我已经对此进行了测试)。照片的 U
我的 xCode 5.0 目前遇到一个奇怪的问题:一个对象在控制台中似乎为 nil,但同时它可以通过代码访问。 图 1:对象似乎为零 图2:NSLog(@"%@", imgDownloader) 的输
我有一个实现协议(protocol)的类,以便添加 3 个变量。我专门设置了图像变量,调试器显示该变量存在,但是在我打印它时在代码中显示为 nil,我的 if let 语句也认为该变量为 nil。 @
这个问题在这里已经有了答案: Swift 2 ( executeFetchRequest ) : error handling (5 个答案) 关闭 7 年前。 开始在 SWIFT 中学习编码,每次
两者 (not 'nil) 和 (not nil) 求值为T,那么'nil和nil有什么区别吗?那么 ''nil 呢?如果 ''nil 的计算结果为 'nil,那么 ''nil 是否也应该计算为 ni
(if '(nil nil) 'print-true 'print-false) (if '(nil) 'print-true 'print-false) 在上面的代码
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: obj.nil? vs. obj == nil 我发现了一个问题 - == nil 和 nil 哪个更好?
此代码段抛出异常: x = nil jsoned = x.to_json puts 'x.to_json=' + jsoned.inspect puts 'back=' + JSON.parse(js
基本上我有一个对象想要传递给前端。我在后端记录了它,它不是空的,但是在前端,当我提醒它时,它变成了空。 ... presentation := &presentationStruct { Obje
我创建了一个自定义错误类型来包装错误,以便在 Golang 中更轻松地进行调试。当有错误要打印时它可以工作,但现在它会引起 panic 。 Demo type Error struct { E
写一个符合我当前问题的标题有点难..我有一个 main() 函数,它使用另一个包 (database_sql) 中的函数。该函数初始化一个全局变量 sql.DB*。初始化后,变量不为nil,但是对于其
我是一名优秀的程序员,十分优秀!