如何增加和减少字段并为用户限制一次?

时间:2016-10-15 01:21:05

标签: ruby-on-rails

大家好我正在开发一个应用程序,我有一个有两列'foo'的书表,'bar'都是整数。

现在我已将默认值设置为零。我希望用户能够单击一个按钮并将它们递增一个,并且下次同一个用户点击它时,字段将减一。这意味着特定用户只能将其递增一次并递减一次。循环继续:这样可以为所有用户计算总计'foo'和'bar' 以下是我的尝试: 在Book的控制器中我有

Def increase_and_decrease_foo
If @book.foo == 0
@book.foo +=1
@book.save
Else
@book.foo -=1
@book.save
End

Def increase_or_decrease_bar
If @book.bar == 0
@book.bar +=1
@book.save
Else
@book.bar -=1
@book.save
End

在视图中 我有<%= button_to'add1',increase_or_decrease_path(@book)%> 每当所有其他用户点击它时,这会添加一个并删除一个...这不是我想要的。请有人指点我这里做什么?我真的迷失在这里。

1 个答案:

答案 0 :(得分:2)

根据您的描述,听起来您希望维持每位用户的计数,而不仅仅是本书。

一种可能的解决方案是创建一个连接表:

class Book
has_many :user_votes

class UserVotes
belongs_to :books
belongs_to :users

class User
has_many :user_votes

然后,将在UserVotes表中定义foo和bar列。

这样您就可以访问@user.user_votes -> all votes by that user@book.user_votes -> all votes on that book

您可能希望在两个轴上查询它们:

class UserVotes
...
scope :for_user, ->(user_id) { where(user_id: user_id) }
scope :for_book, ->(book_id) { where(book_id: book_id) }