<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	<channel>
		<title>Simple Ruby on Rails Content Editing | Infinum</title>
		<atom:link href="https://infinum.com/blog/simple-ruby-on-rails-content-editing/feed/" rel="self" type="application/rss+xml" />
		<link>https://infinum.com/blog/simple-ruby-on-rails-content-editing/</link>
		<description>Building digital products</description>
		<lastBuildDate>Tue, 12 May 2026 11:35:56 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>8062https://infinum.com/uploads/2013/11/simple-ruby-on-rails-content-editing-0.webp</url>
				</image>
				<title>Simple Ruby on Rails Content Editing</title>
				<link>https://infinum.com/blog/simple-ruby-on-rails-content-editing/</link>
				<pubDate>Wed, 20 Nov 2013 06:34:00 +0000</pubDate>
				<dc:creator>Damir Svrtan</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/simple-ruby-on-rails-content-editing/</guid>
				<description>
					<![CDATA[<p>When your client asks for some copy editing on their website, does it take too much of your time? </p>
<p>The post <a href="https://infinum.com/blog/simple-ruby-on-rails-content-editing/">Simple Ruby on Rails Content Editing</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-163"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-93">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-94'
	>
	When your client asks for some copy editing on their website, does it take too much of your time? Or maybe you’re the client and every time you ask your devs to change one sentence on your website, it takes them a week?</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-96">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-97'
	>
	You’ve all probably been there – you’re creating a simple website, a couple of pages, mostly HTML and CSS, maybe a marketing site/one-pager for a product or service. You feel a full-fledged Ruby on Rails <a href="http://en.wikipedia.org/wiki/Content_management_system">Content management system</a> would be more of a distraction than it would provide real business value to the client, but manually editing the code is a waste of your time and money.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-99">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-100'
	>
	Phrasing</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-102">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-103'
	>
	Phrasing is an <strong>inline live content editing library</strong> that can be installed to any website so anyone can manage content and get a preview of what those changes will look like in real time.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-107"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-105">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-106'
	>
	Take a look at this short intro video below:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-110"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-108"
	 data-media-type='embed'>

	<div class="embed block-media__embed" data-id=es-109>
	<iframe
		class="embed__iframe block-media__embed-iframe"
		src="https://www.youtube.com/embed/wOqzulEzNsY?vq=hd1080&#038;rel=0"
		frameborder="0"
		aria-label="Embed iframe"
		allow="autoplay; accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture;"
		allowfullscreen>
	</iframe>
</div></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-113"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-111">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-112'
	>
	The name <a href="http://infinum.github.io/phrasing/">Phrasing</a> originated from <a href="http://www.youtube.com/watch?v=hyLWrKh2fB0">Archer</a>, a popular animated comedy series. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-116"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-114">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-115'
	>
	We build all of our websites using <a href="http://rubyonrails.org/">Ruby on Rails</a>, so we created a gem to solve this problem. In the Ruby world, a <strong>gem</strong> is the name for a reusable library which can easily be installed to any application.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-119"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-117">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-118'
	>
	Getting started</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-122"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-120">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-121'
	>
	If you are thinking by now that a micro CMS does the same thing, you’re not far off.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-125"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-123"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-124">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2013/11/simple-ruby-on-rails-content-editing-1.webp"
					class="image__img block-media__image-img"
					alt=""
										height="433"
															width="744"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-128"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-126">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-127'
	>
	The gem is open sourced on <a href="http://github.com/infinum/phrasing">Github</a>, so anyone can use it. The setup process is very quick and straightforward &#8211; it shouldn’t take you more than 3 minutes to get it up and running.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-131"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-129">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-130'
	>
	After a short initial setup where you include some code and configure who will be able to edit phrases, you can start placing phrases all over your website. Just mark each editable region (phrase) with a key (such as <strong>post-title</strong> or <strong>about-us-description</strong>) in the HTML and set an initial value later.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-134"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-132">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-133'
	>
	Finally, you can show your client the website and enjoy them patting you on the back.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-137"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-135">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-136'
	>
	Features</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-140"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-138">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-139'
	>
	There’s a floating status window in the bottom right corner of the web page. Here you can track whether all the changes you’ve made are saved, and also switch from <strong>edit mode</strong> to <strong>read-only mode</strong>. The read-only mode shows you what the page looks like to a regular user.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-143"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-141"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-auto" data-id="es-142">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2013/11/simple-ruby-on-rails-content-editing-2.webp"
					class="image__img block-media__image-img"
					alt=""
										height="290"
															width="181"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-146"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-144">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-145'
	>
	Other features</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-149"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-147">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-148'
	>
	Alongside the basics I describe here, Phrasing has a couple of other features:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-152"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-150">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-151'
	>
	<li>A flexible authorization system</li><li>Internationalization and localization support</li><li>Inline editing of any attribute from any database table (this is pretty cool, check it out)</li><li>Download all the phrases for offline editing and upload them afterwards</li><li>Handling security issues</li><li>Phrase versioning</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-155"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-153">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-154'
	>
	Happy ending (Phrasing!)</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-158"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-156">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-157'
	>
	Since Phrasing is built on two other libraries called <a href="https://github.com/Zorros/copycat">Copycat</a> and <a href="http://www.zenpen.io/">ZenPen</a>, I want to thank all of the authors and contributors of both libraries for making them awesome, well documented and open sourced!</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-161"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-159">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-160'
	>
	If you are interested in using the Phrasing gem in your own application, just <a href="http://infinum.github.io/phrasing/">follow the instructions on this page</a>. In a couple of minutes, your clients will be able to edit content, and you can get back to doing productive work.</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/simple-ruby-on-rails-content-editing/">Simple Ruby on Rails Content Editing</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>