Extending controllers

I’m fairly new to RoR, so apologies in advance if I rape the
terminology here…

I am trying to use functionality from one controller in another
controller. Here is the first controller:

class PagesController < ApplicationController

def show
@page = Page.find(params[:id])


2nd controller

class SiteController < ApplicationController
def some_page
@page = Page.find(:all, :conditions => “name = ‘some_page’”)

Ultiamtely, I’m trying to access my “Pages” table from a controller
other than the Pages controller… not sure if I have to extend the
new controller or how the functionality “trickles down” to my new

Any advice is appreciated

You don’t need to do anything in particular. The Page model is
available in the same way from whatever controller or other model
you’re using.


Thanks for the response, that’s what I was hoping was the case. One
more question:

This code in the “show” Page view works fine

<% for column in Page.content_columns %>

<%= column.human_name %>: <%=h @page.send(column.name) %>

<% end %>

However if I copy that into the “about” view in the new controller, I
get this error:

undefined method `name’ for #Array:0xb799d1f0

Note, I’m using this to fetch the data in the controller: @page =
Page.find(:all, :conditions => “name = ‘some_page’”)

<%= debug(@page) %> shows a valid record returned in the Page object,
so I’m unclear why the for loop would be failing?


On Sep 30, 1:16 pm, Frederick C. [email protected]

makes sense, thanks for your time


The problem is that in your show action, @page is a single record. In
your “about” action, you are using :all in find, which returns an array.
If you just want a single record, change it to :first. If you want to
use the array, do it like this:

<% @pages.each do |page| -%>
<% for column in Page.content_columns %>

<%= column.human_name %>: <%=h page.send(column.name) %>

<% end %>
<% end -%>