Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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 组合模型,以便用户操作将它们带到下一个对象';s观点_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 组合模型,以便用户操作将它们带到下一个对象';s观点

Ruby on rails 组合模型,以便用户操作将它们带到下一个对象';s观点,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个Rails应用程序,它是一个书籍集合,用户可以向上、向下或中立投票——投票操作(影响一个名为“分数”的属性)应该将他们带到自己的永久链接上的下一本书。现在我有一个模仿下一篇/上一篇文章的模型,所以它会按顺序展示书籍 当我尝试将模型放在一起时,我遇到了一个错误(一个增加分数的模型,另一个移动到下一本书)。下面的代码仅指向上投票,因为这是我试图首先解决的问题 视图: 我对Ruby不太了解,而且我是Rails的初学者,如果您能为我指出正确的方向,我将不胜感激,谢谢 在您的next\u book

我有一个Rails应用程序,它是一个书籍集合,用户可以向上、向下或中立投票——投票操作(影响一个名为“分数”的属性)应该将他们带到自己的永久链接上的下一本书。现在我有一个模仿下一篇/上一篇文章的模型,所以它会按顺序展示书籍

当我尝试将模型放在一起时,我遇到了一个错误(一个增加分数的模型,另一个移动到下一本书)。下面的代码仅指向上投票,因为这是我试图首先解决的问题

视图:


我对Ruby不太了解,而且我是Rails的初学者,如果您能为我指出正确的方向,我将不胜感激,谢谢

在您的
next\u book
方法中,条件不应该是
id>?
,因为您希望找到“next”book(我假设它意味着books表中的下一行)。还有,你得到的错误是什么?我从Book.last开始,然后向后走,这样用户会首先看到新书(以后可能会将其更改为随机顺序)。错误是:BooksController中的NoMethodError#为#增加未定义的方法'next_book',好的,我明白了。因此,您试图调用
next\u book
方法,就好像它是
BooksController
的方法一样,但它属于
book
类。所以你需要做
book.next\u book
。此外,正如岑永所暗示的,您需要调用渲染或重定向操作,这取决于整个操作的行为方式。这很有效,非常感谢!棒极了-结果是:
重定向到book。下一本书
,感谢@teeg上面的评论
def increase
  book = Book.find(params[:id])
  if book.increase_score
    redirect_to next_book_path(params[:id])
  end
end
def next_book
  self.class.first(:conditions => ["id < ?", id], :order => "id desc")
end

def increase_score
    self.score ||= 0
    self.score += 1 
    self.save!
end
def increase
    book = Book.find(params[:id])
    if book.increase_score
      next_book
    end
end
def increase
  book = Book.find(params[:id])
  if book.increase_score
    redirect_to next_book_path(params[:id])
  end
end