Pagy
request.js | Pagy | |
---|---|---|
11 | 10 | |
366 | 4,464 | |
1.6% | - | |
5.3 | 9.6 | |
25 days ago | 1 day ago | |
JavaScript | Ruby | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
request.js
-
Help importing fetch on stimulus
For some extra help with crsf tokens. I would recommend the request.js library in the rails GitHub. https://github.com/rails/request.js
-
Build a Table Editor with Trix and Turbo Frames in Rails
We will now connect our toolbar's table button to the server-side controller action we have just written. To do this, we first need to bring Rails' request.js library into the project. This library will help us administer post requests from the client, including proper CSRF-tokens, etc.:
-
how to implement a bootstrap dropdown in a button
Then, you will need to use fetch or other libs like rails/request.js (https://github.com/rails/request.js) to send a patch request with formData to your model's update path (usually something like /fruits), this is to update your model data. If you are using scaffolded controller, you should have respond_to js configured for you by default. If not, remember to add respond_to :js to your controller, and list data attributes you wanted to return from the server.
-
Reactiveness In Rails
Stimulus and request.js should get you about 90% of the way for your example
-
Pagination and infinite scrolling with Rails and the Hotwire stack
One way to work around this is described in Dale’s article. In it, a Stimulus controller and request.js are used to insert a Turbo Stream header into GET requests, getting Turbo to see the request as a Turbo Stream request despite not originating from a form submission.
-
Is it possible to trigger turbo_stream update from Stimulus controller?
The Rails.ajax function comes from the @rails/ujs package, which isn't Turbo-aware. You should be using @rails/request.js instead, which can execute Turbo Stream commands:
-
Rails 7.0 has been released
It's not part of Hotwire, but supplemental for when you want to make AJAX requests from Stimulus or whatever. https://github.com/rails/request.js
-
Using stimulus to fetch api in ajax manner
So with our applications we've started using request.js to make JS based requests to the applications, it's super handy and very easy to use.
-
Infinite Scroll with HOTWire - Part 2: Adding Stimulus
request.js is a minimalistic JavaScript pacakge that is set to replace Rails UJS in the near future. We will be using it to fetch new pages from the server. Let's install the package
-
Multi-Factor Authentication for Rails with WebAuthn and Devise
First, we will add the necessary NPM packages. We will use @github/webauthn-json as a nice wrapper for the WebAuthn API and @rails/request.js for easier requests to the backend (with built-in Turbo Stream support).
Pagy
-
Build Load More Pagination with Pagy and Rails Hotwire
Now, let's dive into the pagination part of this post: setting up Pagy for handling pagination in our Rails application. If you haven't included the Pagy gem in your project, you'll need to add it manually. Here's how you can do it:
-
Pagination in Rails with Pagy gem
Several gems are available for pagination in Rails, but the Pagy gem is one of the most popular and efficient. It is a fast and lightweight library that provides a simple and flexible API. In this article, we’ll explore how to use it to implement pagination in Rails.
-
Rux: A JSX-inspired way to render view components in Ruby
> Am I understanding correctly that there’s a significant difference in performance between using a ViewComponent + a partial vs. a ViewComponent which renders html via a tag - from inside the component?
I don't think there will be much difference at all in everyday use, but some libraries that value performance don't avoid templates for that reason, Pagy for example.
https://github.com/ddnexus/pagy
Personally I omit them in my projects whenever we want to customise attributes, I hate seeing stuff like this in templates:
Some header
-
A powerful search feature with what Rails provides out of the box
The next step was about backporting the templates, adding Pagy gem for handling pagination and creating the controller. I was then able to show the listings with the models, but the filtering was not working.
-
The Ultimate Search for Rails - Episode 1
On the backend, we'll need a few tools. Apart from the classics (ActiveRecord scopes and the pg_search gem), you’ll see how the (yet officially unreleased but production-tested) all_futures gem, built by SR authors, will act as an ideal ephemeral object to temporarily store our filter params and host our search logic. Finally, we’ll use pagy for pagination duties.
-
My project: railstart app
Pagination
-
Pagination and infinite scrolling with Rails and the Hotwire stack
In our application, we will use Pagy to implement pagination. Let’s install Pagy now, following along with the Pagy quick start guide.
-
Load More Pagination in Rails with Hotwire Turbo Streams
For pagination I tend not to use gems like pagy or kaminari, instead implement this functionality just using limit and offset.
-
Ten Ruby gems for Rails you should definitely know about
Kaminari hooks onto ActiveRecord associations and makes it super easy to page them. Pagy is another option that seems to have a solid API but I haven't tried it yet.
-
Re-Wheel series part 1 - How does Rails' find_each work?
But how is this implemented? Well, if you use pagination in your index methods with gems like pagy, kaminari or will_paginate you will find that the same idea is happening here, they are using the power of SQL's LIMIT and OFFSET to fetch only a portion of the data each time. So in the 1 million users example, find_each will perform 1000 thousand queries with a limit of 1000 while changing the offset properly so we don't miss any record.
What are some alternatives?
hotwire-example-template - A collection of branches that transmit HTML over the wire.
Kaminari - ⚡ A Scope & Engine based, clean, powerful, customizable and sophisticated paginator for Ruby webapps
vite_ruby - ⚡️ Vite.js in Ruby, bringing joy to your JavaScript experience
will_paginate - Pagination library for Rails and other Ruby applications
webauthn-with-devise - The companion app for the article "Secure authentication for Rails with WebAuthn and Devise"
order_query - Find next / previous Active Record(s) in one query
webauthn-json - 🔏 A small WebAuthn API wrapper that translates to/from pure JSON using base64url.
tailwindcss-rails
strong_migrations - Catch unsafe migrations in development
phony_rails - This Gem adds useful methods to your Rails app to validate, display and save phone numbers. It uses the super awesome Phony gem (https://github.com/floere/phony).
money-rails - Integration of RubyMoney - Money with Rails