我想通过单击链接来执行此操作。
def index
@books = Book.all
end
def update_read_books
@books.each do |book|
book.update_attribute(:read, true)
end
end
如何更新将所有书籍标记为已读?
我想通过单击链接来执行此操作。
def index
@books = Book.all
end
def update_read_books
@books.each do |book|
book.update_attribute(:read, true)
end
end
如何更新将所有书籍标记为已读?
Rails 有一个update_all
方法。见链接。
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();
首先在索引方法之外定义你的方法。
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"
试试这个。希望它会有所帮助。