我是使用装饰器的新手,我需要你的帮助来了解如何正确使用它以及我做错了什么。
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
我想它仍然不知道它应该使用装饰器的方法,但是如何修复呢?我无法理解我做错了什么,请帮助找到并解决问题! 先感谢您!
答案 0 :(得分:0)
好吧,我只需要在books_controller中添加expose_decorated(:books)。我觉得它是因为我在索引方法中使用它,所以应该装饰书籍(不仅仅是书)