Giritharan
Mon Oct 21 2024
Managing Global Attributes with
In Rails,
In controllers, Rails automatically resets
Code Example:
In summary: Rails handles resetting
#current #currentAttributes #CU6U0R822
ActiveSupport::CurrentAttributes
in RailsIn Rails,
ActiveSupport::CurrentAttributes
simplifies the process of storing global, thread-safe data like Current.user
or Current.account
during requests or jobs. It should be limited to top-level globals, such as user and request details, which are needed across all actions.In controllers, Rails automatically resets
Current
between requests, so we don’t need to manually clear it. However, In Active Jobs, we need to manually reset Current
after each job to prevent data from leaking between job executions. We achieve this using the after_perform
callback.Code Example:
*app/models/current.rb*:
class Current < ActiveSupport::CurrentAttributes
attribute :user, :account, :request_id
end
app/jobs/my_job.rb
:
class MyJob < ApplicationJob
after_perform :clear_current_attributes
def perform(params)
set_current_attributes(params[:user_id])
end
private
def set_current_attributes(user_id)
Current.user = User.find_by(id: user_id)
Current.request_id = SecureRandom.uuid
end
def clear_current_attributes
Current.reset
end
end
In summary: Rails handles resetting
Current
for controllers, but for jobs, we must manually reset it after each job to avoid data leakage.#current #currentAttributes #CU6U0R822
Aman Suhag
Fri Oct 18 2024
In TypeScript, a tuple is a typed array with a fixed number of elements, where each element may have a different type. Unlike regular arrays, which can hold any number of elements of the same type, tuples define a specific sequence of element types and their corresponding positions.
Key Characteristics of Tuples:
1. Fixed Length: The number of elements in a tuple is fixed. You must specify how many elements the tuple can contain.
2. Different Types: Each element in a tuple can be of a different type. The type for each position is defined.
3. Access by Index: Elements are accessed by their index, just like regular arrays, but the types of the elements at each index are known and enforced by the type system.
#typescript #tuple
Key Characteristics of Tuples:
1. Fixed Length: The number of elements in a tuple is fixed. You must specify how many elements the tuple can contain.
2. Different Types: Each element in a tuple can be of a different type. The type for each position is defined.
3. Access by Index: Elements are accessed by their index, just like regular arrays, but the types of the elements at each index are known and enforced by the type system.
let user: [string, number?] = ["Alice"]; // number is optional
#typescript #tuple
ayasha.pandey
Fri Oct 18 2024
the
#swr #hook
fallbackData
parameter in useSWR
to provide default data for your fetch request. This is super useful when you want to display initial data while waiting for the network request to resolve. The fallback data will be used as the initial value for the data
until the fetcher returns the actual data.
const {
data,
mutate,
error,
} = useSWR(endpoint, fetcherFunction, {
fallbackData: initialData,
});
#swr #hook
soniya.rayabagi
Wed Oct 16 2024
"Adding a User to the Docker Group on Ubuntu"
1.
2.
3.
4.
#Ubuntu #DevOps #Docker
1.
sudo groupadd docker
# Create the Docker group if it doesn't exist2.
sudo usermod -aG docker $USER
# Adds the current user to the 'docker' group.3.
newgrp docker
# Apply the new group membership4.
docker run hello-world
# Checks if the user can run Docker commands without sudo#Ubuntu #DevOps #Docker
amber.srivastava
Wed Oct 16 2024
useFormContext hook
The
Steps to Use
1. Wrap your form with
2. Access form methods using
Example
1. In your main form component: Wrap your form with
2. In your
#useForm #CCT1JMA0Z
The
useFormContext
hook is a part of react-hook-form
and allows you to access form methods (such as setValue
, getValues
, etc.) from any component nested inside the FormProvider
. This is useful when you want to manage the form state across deeply nested components without passing props down manually.Steps to Use
useFormContext
:1. Wrap your form with
FormProvider
: This allows any child component to access the form context via useFormContext
.2. Access form methods using
useFormContext
: In your component, you can call useFormContext
to access setValue
, getValues
, etc.Example
1. In your main form component: Wrap your form with
FormProvider
and pass in useForm
's returned values.
import { useForm, FormProvider } from "react-hook-form";
const FormComponent = () => {
const methods = useForm();
return (
);
};
2. In your
ChildComponent
or any other component: Use useFormContext
to access the form methods like setValue
or getValues
.
import { useFormContext } from "react-hook-form";
const ChildComponent = () => {
const { setValue } = useFormContext(); // useFormContext gives access to all form methods
return (
{/* Dropdown logic */}
);
};
#useForm #CCT1JMA0Z
Giritharan
Wed Oct 16 2024
Managing Jobs in SolidQueue with Rails Console
•
•
•
•
•
•
•
#activejob #solidqueue #queriesforsolidqueue #CU6U0R822
•
SolidQueue::RecurringExecution.all
: You can find and manage recurring jobs with this query.•
SolidQueue::ReadyExecution.all
: Use this query to identify jobs that are ready to run but haven’t started yet.•
SolidQueue::BlockedExecution.all
: Find jobs that are blocked and waiting for conditions to be met before execution.•
SolidQueue::ClaimedExecution.all
: Check jobs that have been claimed by workers but are still in progress.•
SolidQueue::FailedExecution.all
: Use this to track jobs that failed during execution.•
SolidQueue::ScheduledExecution.all
: Find jobs that are scheduled for future execution.•
SolidQueue::Job.where(finished_at: nil)
: Query to get jobs that are still running or haven’t finished yet.#activejob #solidqueue #queriesforsolidqueue #CU6U0R822
Adithya Hebbar
Fri Oct 11 2024
Here’s how to update the most recent commit with new changes:
• The
• The
After amending the commit, if it has already been pushed to the remote repository, you’ll need to force push the changes using:
#git #git-commit
git commit --amend --no-edit
command allows you to modify the most recent commit without changing its commit message.• The
--amend
flag updates the previous commit with the new changes.• The
--no-edit
option keeps the existing commit message unchanged.After amending the commit, if it has already been pushed to the remote repository, you’ll need to force push the changes using:
git push -f
#git #git-commit
Aman Suhag
Wed Oct 09 2024
Symbols shown in build logs for routes specifies-
#build
ƒ
: A dynamic function, typically an API route, that runs on the server and is not statically exported.○
: A statically generated (SSG) page, built once during the build process.●
: A dynamically generated (SSR) page, built at request time.#build
Giritharan
Wed Oct 09 2024
Rails Association Callbacks
Rails association callbacks let you hook into the lifecycle events of an associated collection. These callbacks are triggered when objects are added to or removed from the collection.
Available Callbacks:
-
-
-
-
#associationcallbacks #callbacks #CU6U0R822
Rails association callbacks let you hook into the lifecycle events of an associated collection. These callbacks are triggered when objects are added to or removed from the collection.
Available Callbacks:
-
before_add
: Invoked before an object is added to the collection.-
after_add
: Invoked after an object is added to the collection.-
before_remove
: Invoked before an object is removed from the collection.-
after_remove
: Invoked after an object is removed from the collection.#associationcallbacks #callbacks #CU6U0R822
nived.hari
Wed Oct 09 2024
"Search-as-You-Type" in Rails with Turbo Frames and Stimulus
Making the search box more interactive can be achieved with simple steps:
We could do this without Turbo by submitting the form whenever an input event occurs, right? No. In that case, on each input, the form gets submitted, and the input field loses focus. This is where Turbo Frames come into play. For this scenario, we need Turbo to reload only the content we want to update while leaving the rest of the page as it is.
For this, we define which part we want to reload based on our search by wrapping that particular section inside a
Sample search form:
Example:
( We will give data : { turbo_frame: "search_results" } in this case )
In this way, when a fetch occurs from the search form, only the part inside the
For optimization, we can add debouncing also, which can be done in the Stimulus controller.
#RubyOnRails #turbo #turbo_frames
Making the search box more interactive can be achieved with simple steps:
We could do this without Turbo by submitting the form whenever an input event occurs, right? No. In that case, on each input, the form gets submitted, and the input field loses focus. This is where Turbo Frames come into play. For this scenario, we need Turbo to reload only the content we want to update while leaving the rest of the page as it is.
For this, we define which part we want to reload based on our search by wrapping that particular section inside a
turbo_frame_tag
and targeting that Turbo Frame from the search form.Sample search form:
<%= form_with(
url: search_path, method: :get,
data: { turbo_frame: "frame_id", turbo_action: "advance", controller: "search", action: "input->search#submit" }
) do |f| %>
<%= f.search_field field_name, placeholder: placeholder, value: params %>
<% end %>
turbo_frame
: Points to the specific Turbo Frame we want to update with the search results. It allows us to reload only the content within this frame without affecting the rest of the page.turbo_action
: Defines the behavior of the Turbo request. In this case, it is set to "advance," which means the URL is appended to the previous ones. This allows users to navigate back to previous searches using the browser's back button, maintaining the search history. There are other actions like "restore", "pop"
as well.Example:
<%= turbo_frame_tag "search_results" do %>
#This will contain the search results
<% end %>
( We will give data : { turbo_frame: "search_results" } in this case )
In this way, when a fetch occurs from the search form, only the part inside the
turbo_frame_tag
is reloaded. The rest of the page remains untouched, and the form won't lose focus.For optimization, we can add debouncing also, which can be done in the Stimulus controller.
#RubyOnRails #turbo #turbo_frames
Showing 5 to 7 of 73 results