<?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>ruby on rails views model on random thoughts</title><link>https://awesomeprogrammer.com/categories/ruby-on-rails-views-model/</link><description>Recent content in ruby on rails views model on random thoughts</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 07 Oct 2012 00:00:00 +0000</lastBuildDate><atom:link href="https://awesomeprogrammer.com/categories/ruby-on-rails-views-model/index.xml" rel="self" type="application/rss+xml"/><item><title>Breaking Rails, hackery that you probably shouldn't do - rendering views in model</title><link>https://awesomeprogrammer.com/blog/2012/10/07/breaking-rails-rendering-views-in-model/</link><pubDate>Sun, 07 Oct 2012 00:00:00 +0000</pubDate><guid>https://awesomeprogrammer.com/blog/2012/10/07/breaking-rails-rendering-views-in-model/</guid><description><![CDATA[<p>You may have some reason to break outside MVC model and I won&rsquo;t give you lecture why you shoudn&rsquo;t really do it, neither I won&rsquo;t describe how you will burn in hell for commiting that kind of sin. Instead I will provide a working solution how it can be done. Just as a example of bad pratice :P.</p>
<p>So – how to render view inside model in Rails 3.2?</p>
<p>Let&rsquo;s start by creating an class that will inherit from <a href="http://api.rubyonrails.org/classes/AbstractController/Base.html">AbstractController::Base</a>. You will also need to include bunch of other classes that are required for rendering views, include url_helper, application helper and any other helpers that you may want to use, don&rsquo;t forget to setup your views path.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ruby" data-lang="ruby"><span style="display:flex;"><span><span style="color:#75715e"># lib/render_abstract.rb</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">RenderAbstract</span> <span style="color:#f92672">&lt;</span> <span style="color:#66d9ef">AbstractController</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Base</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">AbstractController</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Rendering</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">AbstractController</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Layouts</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">AbstractController</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Helpers</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">AbstractController</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Translation</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">AbstractController</span><span style="color:#f92672">::</span><span style="color:#66d9ef">AssetPaths</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">ActionDispatch</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Routing</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">Rails</span><span style="color:#f92672">.</span>application<span style="color:#f92672">.</span>routes<span style="color:#f92672">.</span>url_helpers
</span></span><span style="display:flex;"><span>  helper <span style="color:#66d9ef">ApplicationHelper</span>
</span></span><span style="display:flex;"><span>  self<span style="color:#f92672">.</span>view_paths <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;app/views&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">def</span> <span style="color:#a6e22e">show</span>(article)
</span></span><span style="display:flex;"><span>    @article <span style="color:#f92672">=</span> article
</span></span><span style="display:flex;"><span>    render <span style="color:#e6db74">:partial</span> <span style="color:#f92672">=&gt;</span> <span style="color:#e6db74">&#39;articles/show&#39;</span>, <span style="color:#e6db74">:layout</span><span style="color:#f92672">=&gt;</span><span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">end</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">end</span>
</span></span></code></pre></div><p><code>show</code> method will accept object of class <code>Article</code> and setup variable accessible to view in standard fashion. Here&rsquo;s how <code>Article</code> model looks:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ruby" data-lang="ruby"><span style="display:flex;"><span><span style="color:#75715e"># app/models/article.rb</span>
</span></span><span style="display:flex;"><span>require <span style="color:#e6db74">&#39;render_abstract.rb&#39;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">Article</span> <span style="color:#f92672">&lt;</span> <span style="color:#66d9ef">ActiveRecord</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Base</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">def</span> <span style="color:#a6e22e">render</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">RenderAbstract</span><span style="color:#f92672">.</span>new<span style="color:#f92672">.</span>show(self)
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">end</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">end</span>
</span></span></code></pre></div><p>Calling render on article object should now render your view. How about that. Just don&rsquo;t tell anyone ;-).</p>
<p>In next part I will give you some ideas how can you proxy your Rails application inside existing PHP project. The hunt for witches begins now.</p>]]></description><content:encoded><![CDATA[<p>You may have some reason to break outside MVC model and I won&rsquo;t give you lecture why you shoudn&rsquo;t really do it, neither I won&rsquo;t describe how you will burn in hell for commiting that kind of sin. Instead I will provide a working solution how it can be done. Just as a example of bad pratice :P.</p>
<p>So – how to render view inside model in Rails 3.2?</p>
<p>Let&rsquo;s start by creating an class that will inherit from <a href="http://api.rubyonrails.org/classes/AbstractController/Base.html">AbstractController::Base</a>. You will also need to include bunch of other classes that are required for rendering views, include url_helper, application helper and any other helpers that you may want to use, don&rsquo;t forget to setup your views path.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ruby" data-lang="ruby"><span style="display:flex;"><span><span style="color:#75715e"># lib/render_abstract.rb</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">RenderAbstract</span> <span style="color:#f92672">&lt;</span> <span style="color:#66d9ef">AbstractController</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Base</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">AbstractController</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Rendering</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">AbstractController</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Layouts</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">AbstractController</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Helpers</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">AbstractController</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Translation</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">AbstractController</span><span style="color:#f92672">::</span><span style="color:#66d9ef">AssetPaths</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">ActionDispatch</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Routing</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">include</span> <span style="color:#66d9ef">Rails</span><span style="color:#f92672">.</span>application<span style="color:#f92672">.</span>routes<span style="color:#f92672">.</span>url_helpers
</span></span><span style="display:flex;"><span>  helper <span style="color:#66d9ef">ApplicationHelper</span>
</span></span><span style="display:flex;"><span>  self<span style="color:#f92672">.</span>view_paths <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;app/views&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">def</span> <span style="color:#a6e22e">show</span>(article)
</span></span><span style="display:flex;"><span>    @article <span style="color:#f92672">=</span> article
</span></span><span style="display:flex;"><span>    render <span style="color:#e6db74">:partial</span> <span style="color:#f92672">=&gt;</span> <span style="color:#e6db74">&#39;articles/show&#39;</span>, <span style="color:#e6db74">:layout</span><span style="color:#f92672">=&gt;</span><span style="color:#66d9ef">false</span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">end</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">end</span>
</span></span></code></pre></div><p><code>show</code> method will accept object of class <code>Article</code> and setup variable accessible to view in standard fashion. Here&rsquo;s how <code>Article</code> model looks:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ruby" data-lang="ruby"><span style="display:flex;"><span><span style="color:#75715e"># app/models/article.rb</span>
</span></span><span style="display:flex;"><span>require <span style="color:#e6db74">&#39;render_abstract.rb&#39;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">Article</span> <span style="color:#f92672">&lt;</span> <span style="color:#66d9ef">ActiveRecord</span><span style="color:#f92672">::</span><span style="color:#66d9ef">Base</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">def</span> <span style="color:#a6e22e">render</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">RenderAbstract</span><span style="color:#f92672">.</span>new<span style="color:#f92672">.</span>show(self)
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">end</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">end</span>
</span></span></code></pre></div><p>Calling render on article object should now render your view. How about that. Just don&rsquo;t tell anyone ;-).</p>
<p>In next part I will give you some ideas how can you proxy your Rails application inside existing PHP project. The hunt for witches begins now.</p>]]></content:encoded></item></channel></rss>