我想通过点击链接来执行此操作。
def index
@books = Book.all
end
def update_read_books
@books.each do |book|
book.update_attribute(:read, true)
end
end
如何将所有图书标记为已阅读?
答案 0 :(得分:0)
Rails有update_all
方法。 See link
def mark_as_read
Book.update_all(read: true)
redirect_to books_path
end
设置路线,为您提供/books/mark_as_read
resources :books do
get :mark_as_read, on: :collection
end
然后在你看来:
= link_to "Mark all as Read", mark_as_read_books_path
如果您真的想要Restful,可以将路线设为put / patch方法。不要忘记更改您选择的方法的链接。
如果您希望这是一个Ajax请求,可以在链接中添加remote: true
:
= link_to "Mark all as Read", mark_as_read_books_path, remote: true
这将使它异步。然后,您需要在控制器中处理该响应。
def mark_as_read
Book.update_all(read: true)
respond_to do |format|
format.html { redirect_to books_path }
format.js
end
end
...并在/views/books/update_all.js.erb
中添加一个模板,并添加一些jQuery来删除通知。例如:
$('#notification_count').hide();
答案 1 :(得分:0)
首先在索引方法之外定义你的方法。
def index
@books = Book.all
end
def update_read_books
Book.update_all(read: true)
end
定义路线:
resources :books do
put :update_read_books, on: :collection
end
然后在你看来:
= form_for update_read_books ,:remote => true do |f|
= f.submit "All Read"
试试这个。希望它会有所帮助。