我还在学习rails,所以你能提供的任何帮助都会非常有帮助。我已经在我的图书应用中为我的喜欢设置了计数。因此,每当用户喜欢一本书时 - 该数字会增加一个,或者如果与之不同则会减少。但是,如果还没有人喜欢一本书 - 会出现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
Book.rb
class Book < ApplicationRecord
has_many :likes, :counter_cache => true
has_many :users, through: :likes
belongs_to :user
end
Likes.rb
class Like < ApplicationRecord
belongs_to :book, :counter_cache => true
belongs_to :user
end
喜欢计数迁移
class AddLikecountsToBook < ActiveRecord::Migration[5.0]
def change
add_column :books, :likes_count, :integer, :null => false, :default => 0
end
end
答案 0 :(得分:3)
通过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个查询。
答案 1 :(得分:1)
如果您不希望视图显示0,则可以在视图中添加if语句。
<% if @votes == 0 %>
be the first to rate this book
<% else %>
<%= @votes %>
<% end %>
或者将变量从控制器返回到视图
def
if @votes == 0
@votes = ''
end
end