如何在导轨中正确使用装饰器?

时间:2016-06-01 23:45:29

标签: ruby-on-rails decorator draper

我是使用装饰器的新手,我需要你的帮助来了解如何正确使用它以及我做错了什么。

book_decorator.rb

class BookDecorator < ApplicationDecorator
  delegate_all

  def in_users_list?(user)
    if user.books.exists?
      true
    end
  end
end

视图/书籍/ index.html.slim

- if book.in_users_list?(current_user)
  - button_text = 'I've read this book'
... #depict some buttons and links

books_controller.rb

class BooksController < ApplicationController
  expose(:book, attributes: :book_params, finder_parameter: :id)
  expose_decorated(:book, decorator: BookDecorator)
...

我已经按照这些教程(https://github.com/netguru/decent_decoration https://github.com/drapergem/draper#decorating-objects)了,似乎没问题,但是当我在书籍索引页面上时,它说

  

未定义的方法`in_users_list?' for Book:0x007f6f4a0a4a18

我想它仍然不知道它应该使用装饰器的方法,但是如何修复呢?我无法理解我做错了什么,请帮助找到并解决问题! 先感谢您!

1 个答案:

答案 0 :(得分:0)

好吧,我只需要在books_controller中添加expose_decorated(:books)。我觉得它是因为我在索引方法中使用它,所以应该装饰书籍(不仅仅是书)