Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 针对零和大数字的计数器缓存自定义_Ruby On Rails_Ruby_Ruby On Rails 4_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 针对零和大数字的计数器缓存自定义

Ruby on rails 针对零和大数字的计数器缓存自定义,ruby-on-rails,ruby,ruby-on-rails-4,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 4,Ruby On Rails 5,我还在学习rails,所以你能提供的任何帮助都会非常有用。我已经在我的图书应用程序上设置了我喜欢的数量。因此,每当用户喜欢一本书时,这个数字就会增加1,如果用户不喜欢,这个数字就会减少。然而,如果还没有人喜欢一本书,就会出现0。我希望它是空白的,这样只有当用户喜欢它时才会出现数字。我在下面列出了我所有的相关代码。非常感谢你 Schema.rb create_table "books", force: :cascade do |t| t.string "title" t.integer

我还在学习rails,所以你能提供的任何帮助都会非常有用。我已经在我的图书应用程序上设置了我喜欢的数量。因此,每当用户喜欢一本书时,这个数字就会增加1,如果用户不喜欢,这个数字就会减少。然而,如果还没有人喜欢一本书,就会出现0。我希望它是空白的,这样只有当用户喜欢它时才会出现数字。我在下面列出了我所有的相关代码。非常感谢你

Schema.rb

create_table "books", force: :cascade do |t|
  t.string   "title"
  t.integer  "user_id"
  t.integer  "book_id"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.string   "avatar_file_name"
  t.string   "avatar_content_type"
  t.integer  "avatar_file_size"
  t.datetime "avatar_updated_at"
  t.integer  "likes_count", default: 0, null: false
end

create_table "likes", force: :cascade do |t|
  t.integer  "user_id"
  t.integer  "book_id"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end
class Book < ApplicationRecord
  has_many :likes, :counter_cache => true
  has_many :users, through: :likes
  belongs_to :user
end
class Like < ApplicationRecord
  belongs_to :book, :counter_cache => true
  belongs_to :user
end
Book.rb

create_table "books", force: :cascade do |t|
  t.string   "title"
  t.integer  "user_id"
  t.integer  "book_id"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.string   "avatar_file_name"
  t.string   "avatar_content_type"
  t.integer  "avatar_file_size"
  t.datetime "avatar_updated_at"
  t.integer  "likes_count", default: 0, null: false
end

create_table "likes", force: :cascade do |t|
  t.integer  "user_id"
  t.integer  "book_id"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end
class Book < ApplicationRecord
  has_many :likes, :counter_cache => true
  has_many :users, through: :likes
  belongs_to :user
end
class Like < ApplicationRecord
  belongs_to :book, :counter_cache => true
  belongs_to :user
end
classbooktrue
有很多:用户,通过::喜欢
属于:用户
结束
喜欢.rb

create_table "books", force: :cascade do |t|
  t.string   "title"
  t.integer  "user_id"
  t.integer  "book_id"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.string   "avatar_file_name"
  t.string   "avatar_content_type"
  t.integer  "avatar_file_size"
  t.datetime "avatar_updated_at"
  t.integer  "likes_count", default: 0, null: false
end

create_table "likes", force: :cascade do |t|
  t.integer  "user_id"
  t.integer  "book_id"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end
class Book < ApplicationRecord
  has_many :likes, :counter_cache => true
  has_many :users, through: :likes
  belongs_to :user
end
class Like < ApplicationRecord
  belongs_to :book, :counter_cache => true
  belongs_to :user
end
class-Liketrue
属于:用户
结束
喜欢计数迁移

class AddLikecountsToBook < ActiveRecord::Migration[5.0]
  def change
    add_column :books, :likes_count, :integer, :null => false, :default => 0
  end
end
class AddLikecountsToBookfalse,:default=>0
结束
结束

如果不希望视图显示0,可以在视图中添加If语句

<% if @votes == 0 %>
  be the first to rate this book
<% else %>
  <%= @votes %>
<% end %>

如果不希望视图显示0,可以在视图中添加If语句

<% if @votes == 0 %>
  be the first to rate this book
<% else %>
  <%= @votes %>
<% end %>

通过rails中的关联,您可以获得几种互操作方法,如
.any?
.none?
,这些方法可用于创建条件表达式

<% if book.likes.any? %>
  <%= number_to_human(book.likes.size) %>
<% end %>

# or
<%= number_to_human(book.likes.size) unless book.likes.none? %>

#或

这还使用计数器缓存来避免n+1查询。

通过rails中的关联,您可以获得几种互操作方法,例如
.any?
.none?
,它们可以用于创建条件表达式

<% if book.likes.any? %>
  <%= number_to_human(book.likes.size) %>
<% end %>

# or
<%= number_to_human(book.likes.size) unless book.likes.none? %>

#或

这还使用计数器缓存来避免n+1查询。

如果book.likes.any?
你可以用Max处理大数,你把它放在哪里?尽管你创建了一个新的迁移来更改likes计数迁移吗?
如果book.likes.any?
你可以用Max处理大数,你把它放在哪里一个新的迁移来改变喜欢的数量迁移?马克斯先生,这真是太棒了,非常感谢!就我所知的一个问题是,在视图中使用它而不是在控制器中有什么缺点吗?我真的不明白为什么要将它放在控制器中,因为这是一个你希望视图显示什么的问题。明白了,只是我在阅读,所以大多数逻辑动作都要放在控制器中而不是视图中。但是,我相信你max sirMax先生这很有效非常感谢你!就我所知的一个问题是,在视图中使用它而不是在控制器中有什么缺点吗?我真的不明白为什么要将它放在控制器中,因为这是一个你希望视图显示什么的问题。明白了,只是我在阅读,所以大多数逻辑动作都要放在控制器中而不是视图中。但是,我服从你,麦克斯先生