<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Rails on Jake Worth</title><link>https://jakeworth.com/tags/rails/</link><description>Recent content in Rails on Jake Worth</description><image><title>Jake Worth</title><url>https://jakeworth.com/twittercard.png</url><link>https://jakeworth.com/twittercard.png</link></image><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 01 Mar 2024 16:54:46 -0500</lastBuildDate><atom:link href="https://jakeworth.com/tags/rails/index.xml" rel="self" type="application/rss+xml"/><item><title>Inferred Controller Parameters</title><link>https://jakeworth.com/tils/controller-parameters-infered-from-the-model/</link><pubDate>Fri, 01 Mar 2024 16:54:46 -0500</pubDate><guid>https://jakeworth.com/tils/controller-parameters-infered-from-the-model/</guid><description>&lt;p&gt;Be careful when making a network request like this to a Rails controller with strong parameters:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-tsx" data-lang="tsx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// const employee = { name: &amp;#34;Jake&amp;#34; };
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;updateEmployee&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;number&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;employee&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;Employee&lt;/span&gt;) &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;axios&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;put&lt;/span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;Employee&lt;/span&gt;&amp;gt;(&lt;span style="color:#e6db74"&gt;`/employees/&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;employee&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;employee_params&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; params&lt;span style="color:#f92672"&gt;.&lt;/span&gt;require(&lt;span style="color:#e6db74"&gt;:employee&lt;/span&gt;)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;permit(&lt;span style="color:#e6db74"&gt;:name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note that our payload is expected under key &lt;code&gt;employee&lt;/code&gt;– but we aren&amp;rsquo;t sending
it that way. When this happens, Rails infers what goes where:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;PUT https://server.dev/employees/1 { &amp;#34;employee&amp;#34; =&amp;gt; { &amp;#34;name&amp;#34; =&amp;gt; &amp;#34;Jake&amp;#34; } }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notice that &lt;code&gt;name&lt;/code&gt; is in the employee object, even though I didn&amp;rsquo;t send such a
payload. This works fine until you send a parameter that&amp;rsquo;s not on the
&lt;code&gt;Employee&lt;/code&gt; model, such as a nested attribute. Then you get this:&lt;/p&gt;</description></item><item><title>Assert About Response Body in RSpec Controller Tests</title><link>https://jakeworth.com/tils/assert-about-response-body-in-rspec-controller-tests/</link><pubDate>Fri, 23 Feb 2024 15:22:30 -0500</pubDate><guid>https://jakeworth.com/tils/assert-about-response-body-in-rspec-controller-tests/</guid><description>&lt;p&gt;When testing a serialized Rails API with RSpec, a common mistake is to assert
about the response body, only to find that it&amp;rsquo;s an empty string. The controller
is controlling, the view is presenting. What&amp;rsquo;s missing?&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s missing is the view: RSpec views are stubbed by default. This is ideal for most
controller tests. Just not those asserting about serialized data.&lt;/p&gt;
&lt;p&gt;Render those views with &lt;code&gt;render_views&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;require &lt;span style="color:#e6db74"&gt;&amp;#34;rails_helper&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;RSpec&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;describe &lt;span style="color:#66d9ef"&gt;WidgetsController&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;type&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;:controller&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; render_views
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; describe &lt;span style="color:#e6db74"&gt;&amp;#34;GET index&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; it &lt;span style="color:#e6db74"&gt;&amp;#34;has a widgets related heading&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; get &lt;span style="color:#e6db74"&gt;:index&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; expect(response&lt;span style="color:#f92672"&gt;.&lt;/span&gt;body)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;to match &lt;span style="color:#e6db74"&gt;/&amp;lt;h1&amp;gt;.*widgets/im&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Highlighted Routes Searching</title><link>https://jakeworth.com/tils/highlighted-routes-searching/</link><pubDate>Tue, 24 Aug 2021 14:14:40 -0400</pubDate><guid>https://jakeworth.com/tils/highlighted-routes-searching/</guid><description>&lt;p&gt;On a non-trivial Rails app, the output from &lt;code&gt;rake routes&lt;/code&gt; will be huge. Many
people develop a reflex for searching through this output via something like:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ rake routes | grep &amp;#34;&amp;lt;string&amp;gt;&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Which filters the output to matches on the string. I&amp;rsquo;d like to suggest a better option: use
a command-line search tool that highlights the output! Here&amp;rsquo;s that same command with RipGrep:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ rake routes | rg &amp;#34;&amp;lt;string&amp;gt;&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The results are the same (although much faster 😈), but even better is that
that each match will be colorized. It&amp;rsquo;s bright red in my terminal. The
colorizing makes the matches much easier to interpret.&lt;/p&gt;</description></item><item><title>fields_for exclude ID</title><link>https://jakeworth.com/tils/fields-for-exclude-id/</link><pubDate>Thu, 12 Aug 2021 09:47:32 -0400</pubDate><guid>https://jakeworth.com/tils/fields-for-exclude-id/</guid><description>&lt;p&gt;Rails&amp;rsquo; &lt;code&gt;fields_for&lt;/code&gt; helper inserts a hidden ID field into your form. This is
generally helpful, because you&amp;rsquo;ll want that information when you&amp;rsquo;re updating
the record. But what if you don&amp;rsquo;t?&lt;/p&gt;
&lt;p&gt;This is the scenario I encountered today: a &amp;lsquo;read-only&amp;rsquo; form nested inside a
&lt;code&gt;fields_for&lt;/code&gt; helper, with no inputs. It almost worked: unfortunately, due to
the default ID-inserting behavior of &lt;code&gt;fields_for&lt;/code&gt;, there was a &lt;em&gt;hidden&lt;/em&gt; ID
input. It was getting submitted with the rest of the form and breaking things.&lt;/p&gt;</description></item><item><title>Generate a Rails Secret Key</title><link>https://jakeworth.com/tils/generate-a-rails-secret-key/</link><pubDate>Tue, 12 Jan 2016 13:55:55 -0600</pubDate><guid>https://jakeworth.com/tils/generate-a-rails-secret-key/</guid><description>&lt;p&gt;Have you ever wondered about those secret keys found in &lt;code&gt;config/secrets.yml&lt;/code&gt; of your Rails app? The comments generated in that file describe the keys as &amp;lsquo;used for verifying the integrity of signed cookies.&amp;rsquo;&lt;/p&gt;
&lt;p&gt;Great&amp;hellip; but what if they become compromised? Or we need to change them? We can generate new ones.&lt;/p&gt;
&lt;p&gt;Rails provides &lt;code&gt;rake secret&lt;/code&gt; for just this purpose.&lt;/p&gt;
&lt;p&gt;The source code is &lt;a href="https://github.com/rails/rails/blob/7f18ea14c893cb5c9f04d4fda9661126758332b5/railties/lib/rails/tasks/misc.rake#L2"&gt;here&lt;/a&gt;. It&amp;rsquo;s pretty simple; the code simply requires &lt;code&gt;SecureRandom&lt;/code&gt; and spits out a string. If you want to be really clever, you can pipe the string directly into your Vim buffer for the config file, with &lt;code&gt;:.! rake secret&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Show Model and Grep with Pry-rails</title><link>https://jakeworth.com/tils/show-model-and-grep-with-pryrails/</link><pubDate>Fri, 08 Jan 2016 13:11:52 -0600</pubDate><guid>https://jakeworth.com/tils/show-model-and-grep-with-pryrails/</guid><description>&lt;p&gt;This week Josh Branchaud wrote about &lt;code&gt;show-models&lt;/code&gt; in Pry-rails:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://til.hashrocket.com/posts/62f61ee06f-show-rails-models-with-pry"&gt;http://til.hashrocket.com/posts/62f61ee06f-show-rails-models-with-pry&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This method has two nice variants. &lt;code&gt;show-model User&lt;/code&gt; shows you that model, useful in a large database.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;show-models&lt;/code&gt; also accepts &lt;code&gt;--grep&lt;/code&gt; for searching:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; pry(main)&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; show&lt;span style="color:#f92672"&gt;-&lt;/span&gt;models &lt;span style="color:#f92672"&gt;--&lt;/span&gt;grep published
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;Post&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; id: integer
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;title&lt;/span&gt;: string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;published_at&lt;/span&gt;: datetime &lt;span style="color:#75715e"&gt;# &amp;#39;published&amp;#39; is highlighted&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Set a Default Scope</title><link>https://jakeworth.com/tils/set-a-default-scope/</link><pubDate>Fri, 08 Jan 2016 10:23:35 -0600</pubDate><guid>https://jakeworth.com/tils/set-a-default-scope/</guid><description>&lt;p&gt;ActiveRecord provides &lt;code&gt;default_scope&lt;/code&gt;, which you can use to control how records are returned. An example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# app/model/chapter.rb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Chapter&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;ActiveRecord&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;Base&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; default_scope { order(&lt;span style="color:#e6db74"&gt;:title&lt;/span&gt;) }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, instead of this (ordered by ID):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;Chapter&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;all&lt;span style="color:#f92672"&gt;.&lt;/span&gt;pluck(&lt;span style="color:#e6db74"&gt;:title&lt;/span&gt;)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;take(&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;BALINESE CAUSE&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;BUILDING RAT&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;TAIL&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;LILAC MERCURY&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;PUMP SQUARE&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We get this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;Chapter&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;all&lt;span style="color:#f92672"&gt;.&lt;/span&gt;pluck(&lt;span style="color:#e6db74"&gt;:title&lt;/span&gt;)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;take(&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;AFGHANISTAN COAT&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;ALCOHOL GONG&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;ANTARCTICA BULL&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;ASPARAGUS&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;BALINESE CAUSE&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Beware, this decision can lead to inexplicable behavior down the road. Use with caution.&lt;/p&gt;
&lt;p&gt;One use case I&amp;rsquo;ve heard is soft deletes. We might not want soft-deleted records appearing in &lt;code&gt;.all&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Rails restore_attributes</title><link>https://jakeworth.com/tils/rails-restoreattributes/</link><pubDate>Tue, 13 Oct 2015 11:56:12 -0500</pubDate><guid>https://jakeworth.com/tils/rails-restoreattributes/</guid><description>&lt;p&gt;Today I found a useful method in ActiveRecord, &lt;code&gt;restore_attributes&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This method restores attributes on a dirty model. Use it when you are hacking in the Rails console and want to quickly return to a clean slate.&lt;/p&gt;
&lt;p&gt;Dirty the record:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[1] pry(main)&amp;gt; p = Post.first
Post Load (0.4ms) SELECT &amp;#34;posts&amp;#34;.* FROM &amp;#34;posts&amp;#34; ORDER BY &amp;#34;posts&amp;#34;.&amp;#34;id&amp;#34; ASC LIMIT 1
=&amp;gt; #&amp;lt;Post:0x007f8462b09eb8
id: 106,
title: &amp;#34;Hello World!&amp;#34;,
created_at: Sun, 09 Feb 2014 17:15:01 CST -06:00,
url_slug: &amp;#34;hello-world&amp;#34;&amp;gt;
[2] pry(main)&amp;gt; p.url_slug = &amp;#39;foobar&amp;#39;
=&amp;gt; &amp;#34;foobar&amp;#34;
[3] pry(main)&amp;gt; p.created_at = Time.now
=&amp;gt; 2015-10-13 11:41:37 -0500
[4] pry(main)&amp;gt; p
=&amp;gt; #&amp;lt;Post:0x007f8462b09eb8
id: 106,
title: &amp;#34;Hello World!&amp;#34;,
created_at: Tue, 13 Oct 2015 11:41:37 CDT -05:00,
url_slug: &amp;#34;foobar&amp;#34;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And restore:&lt;/p&gt;</description></item><item><title>Rails destroy</title><link>https://jakeworth.com/tils/rails-destroy/</link><pubDate>Tue, 06 Oct 2015 11:32:01 -0500</pubDate><guid>https://jakeworth.com/tils/rails-destroy/</guid><description>&lt;p&gt;The rails &lt;code&gt;generate&lt;/code&gt; (&lt;code&gt;g&lt;/code&gt;) command is useful for quickly creating the building blocks of a Rails app. Until you misspell or otherwise mess up a command:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;% rails g model blurg_post
invoke active_record
create db/migrate/20151006162244_create_blurg_posts.rb
create app/models/blurg_post.rb
invoke rspec
create spec/models/blurg_post_spec.rb
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&amp;lsquo;Blurg post&amp;rsquo;? I meant &amp;lsquo;blog post&amp;rsquo;. Luckily, we can remove those auto-generated files as fast as we created them, with &lt;code&gt;destroy&lt;/code&gt; (&lt;code&gt;d&lt;/code&gt;).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;% rails d model blurg_post
invoke active_record
remove db/migrate/20151006162244_create_blurg_posts.rb
remove app/models/blurg_post.rb
invoke rspec
remove spec/models/blurg_post_spec.rb
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href="http://edgeguides.rubyonrails.org/command_line.html#rails-destroy"&gt;http://edgeguides.rubyonrails.org/command_line.html#rails-destroy&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Change Column Null</title><link>https://jakeworth.com/tils/change-column-null/</link><pubDate>Sun, 28 Jun 2015 12:34:19 -0500</pubDate><guid>https://jakeworth.com/tils/change-column-null/</guid><description>&lt;p&gt;The &lt;code&gt;not null&lt;/code&gt; constraint is a great way to ensure data integrity. If a Rails model &lt;code&gt;validates_presence_of&lt;/code&gt; an attribute, that column should be &lt;code&gt;not null&lt;/code&gt; in the database.&lt;/p&gt;
&lt;p&gt;Rails has a special migration method for setting this constraint.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;change_column_null &lt;span style="color:#e6db74"&gt;:users&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;:mandatory_attribute&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You could also use the &lt;code&gt;change_column&lt;/code&gt; method. The reason &lt;code&gt;change_column_null&lt;/code&gt; is a better choice is that &lt;code&gt;change_column&lt;/code&gt; requires you to state the type of the column; &lt;code&gt;change_column_null&lt;/code&gt; does not.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;change_column(table_name, column_name, type, options)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;change_column_null(table_name, column_name, null, default &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;nil&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Classify and Constantize</title><link>https://jakeworth.com/tils/classify-and-constantize/</link><pubDate>Wed, 03 Jun 2015 22:28:22 -0500</pubDate><guid>https://jakeworth.com/tils/classify-and-constantize/</guid><description>&lt;p&gt;Metaprogramming! Today I created a variable &lt;code&gt;event&lt;/code&gt; that calls a serializer unique to the value of &lt;code&gt;event&lt;/code&gt;. Along the way I learned about the Rails methods &lt;code&gt;classify&lt;/code&gt; and &lt;code&gt;constantize&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;classify&lt;/code&gt; takes a plural table name and returns a class name.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;some_things&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;classify
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;SomeThing&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;constantize&lt;/code&gt; tries to find a constant with the name specified in the argument string.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Module&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;constantize
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;Module&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Nothing&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;constantize
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;NameError&lt;/span&gt;: uninitialized constant &lt;span style="color:#66d9ef"&gt;Nothing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here&amp;rsquo;s a sample of how I used these methods today (on the &amp;lsquo;Today I Learned&amp;rsquo; app itself):&lt;/p&gt;</description></item><item><title>Find Or Create By With Block</title><link>https://jakeworth.com/tils/find-or-create-by-with-block/</link><pubDate>Sat, 30 May 2015 16:50:30 -0500</pubDate><guid>https://jakeworth.com/tils/find-or-create-by-with-block/</guid><description>&lt;p&gt;The Rails &lt;code&gt;find_or_create_by&lt;/code&gt; method is great for bringing something into existence only once. I like to use it for database seeds, so you get the basic objects you need to make your development site useable, but don&amp;rsquo;t keep creating them over and over again.&lt;/p&gt;
&lt;p&gt;One feature I recently learned is that this method takes a block.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;User&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;find_or_create_by(&lt;span style="color:#e6db74"&gt;first_name&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;Jake&amp;#39;&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt;user&lt;span style="color:#f92672"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user&lt;span style="color:#f92672"&gt;.&lt;/span&gt;last_name &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;Worth&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This lets you find the object, and if it doesn&amp;rsquo;t exist, create it with whatever attributes you need.&lt;/p&gt;</description></item><item><title>Multipurpose Environmental Variables</title><link>https://jakeworth.com/tils/multipurpose-environmental-variables/</link><pubDate>Tue, 26 May 2015 21:25:36 -0500</pubDate><guid>https://jakeworth.com/tils/multipurpose-environmental-variables/</guid><description>&lt;p&gt;I use HTTP Basic auth in non-production environments because it ships with Rails and is easy to implement. The first time I used it, I set it up like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# app/controllers/application_controller.rb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;ENV&lt;/span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;http_basic_auth&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; http_basic_authenticate_with name: &lt;span style="color:#66d9ef"&gt;ENV&lt;/span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;username&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;password&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;ENV&lt;/span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I used environmental variables so that no credentials were hard-coded, and so I could toggle it without deploying.&lt;/p&gt;
&lt;p&gt;Today I learned you can also implement it like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# app/controllers/application_controller.rb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; creds &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;ENV&lt;/span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;basic_auth_credentials&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; username, password &lt;span style="color:#f92672"&gt;=&lt;/span&gt; creds&lt;span style="color:#f92672"&gt;.&lt;/span&gt;split(&lt;span style="color:#e6db74"&gt;&amp;#39;:&amp;#39;&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; http_basic_authenticate_with name: username, &lt;span style="color:#e6db74"&gt;password&lt;/span&gt;: password
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This requires an environmental variable called &lt;code&gt;basic_auth_credentials&lt;/code&gt;, set to &lt;code&gt;&amp;lt;username&amp;gt;:&amp;lt;password&amp;gt;&lt;/code&gt;. I prefer this because it allows one variable to serve two purposes: it toggles the feature and also contains the information the feature needs to work.&lt;/p&gt;</description></item><item><title>Redirect a Path</title><link>https://jakeworth.com/tils/redirect-a-path/</link><pubDate>Mon, 11 May 2015 17:17:51 -0500</pubDate><guid>https://jakeworth.com/tils/redirect-a-path/</guid><description>&lt;p&gt;To redirect a path in Rails:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# config/routes.rb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;get &lt;span style="color:#e6db74"&gt;&amp;#34;/authors&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; redirect(&lt;span style="color:#e6db74"&gt;&amp;#34;/designers&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This lets you take a difficult-to-type path name and expose it to your users as a simpler path name:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# config/routes.rb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;get &lt;span style="color:#e6db74"&gt;&amp;#34;/login&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; redirect(&lt;span style="color:#e6db74"&gt;&amp;#34;/auth/google_oauth2&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Bypass Basic Auth</title><link>https://jakeworth.com/tils/bypass-basic-auth/</link><pubDate>Fri, 08 May 2015 13:23:33 -0400</pubDate><guid>https://jakeworth.com/tils/bypass-basic-auth/</guid><description>&lt;p&gt;Rails comes with HTTP Basic authentication built in. Adding this to a controller is how it&amp;rsquo;s done:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# app/controllers/application_controller.rb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http_basic_authenticate_with name: &lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;password&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When you visit a URL requiring authentication, you can bypass the authentication screen by adding your username and password to the beginning of the URL. For localhost, this would look like:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;name:password@localhost:3000
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Parameters Filtering</title><link>https://jakeworth.com/tils/parameters-filtering/</link><pubDate>Sat, 02 May 2015 15:16:47 -0500</pubDate><guid>https://jakeworth.com/tils/parameters-filtering/</guid><description>&lt;p&gt;Rails logs your server&amp;rsquo;s activity, which is useful for development and debugging. However, often the server handles sensitive information that should not be logged.&lt;/p&gt;
&lt;p&gt;A few examples are authentication credentials, personal data, and financial information.&lt;/p&gt;
&lt;p&gt;To prevent Rails from logging such data, add this to your application configuration:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;config&lt;span style="color:#f92672"&gt;.&lt;/span&gt;filter_parameters &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;:sensitive_param&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When the named parameter is handled by the server, it will be logged as &lt;code&gt;[FILTERED]&lt;/code&gt; instead of its actual value. Add this configuration by environment if you want to keep the parameters unfiltered in development.&lt;/p&gt;</description></item><item><title>Modify Attribute on Set</title><link>https://jakeworth.com/tils/modify-attribute-on-set/</link><pubDate>Sat, 02 May 2015 15:12:39 -0500</pubDate><guid>https://jakeworth.com/tils/modify-attribute-on-set/</guid><description>&lt;p&gt;In this example, we want to allow users to enter a twitter handle with or without an at-sign (&amp;rsquo;@&amp;rsquo;), just like Twitter, but save it without the at-sign. &lt;code&gt;twitter_handle&lt;/code&gt; is already an attribute on the class.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;User&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;ActiveRecord&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;Base&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;twitter_handle&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;(handle)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; write_attribute(&lt;span style="color:#e6db74"&gt;:twitter_handle&lt;/span&gt;, handle&lt;span style="color:#f92672"&gt;.&lt;/span&gt;to_s&lt;span style="color:#f92672"&gt;.&lt;/span&gt;gsub(&lt;span style="color:#e6db74"&gt;/^@/&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How Rails Action Name Works</title><link>https://jakeworth.com/tils/how-rails-action-name-works/</link><pubDate>Mon, 10 Nov 2014 11:04:17 -0500</pubDate><guid>https://jakeworth.com/tils/how-rails-action-name-works/</guid><description>&lt;p&gt;Today I was trying to control what rendered on a page based on which controller
action called it, and discovered the &lt;code&gt;action_name&lt;/code&gt; method. It&amp;rsquo;s located in
&lt;code&gt;actionview&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pry&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; method(&lt;span style="color:#e6db74"&gt;:action_name&lt;/span&gt;)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;source_location
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;/Users/jake/.rvm/gems/ruby-2.2.3/gems/actionview-4.2.4/lib/action_view/helpers/controller_helper.rb&amp;#34;&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Add this to your view code, and it you&amp;rsquo;ll get the relevant action:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pry&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; action_name
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;index&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Same partial, different context:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pry&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; action_name
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;drafts&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This method would allow conditionals like this (written in HAML):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; action_name &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;index&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;Welcome&lt;/span&gt; to the index&lt;span style="color:#f92672"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;Welcome&lt;/span&gt; to the drafts&lt;span style="color:#f92672"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://github.com/rails/rails/blob/master/actionview/lib/action_view/helpers/controller_helper.rb#L10"&gt;https://github.com/rails/rails/blob/master/actionview/lib/action_view/helpers/controller_helper.rb#L10&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>