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 %>
  <b><%= column.human_name %>:</b> <%=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?


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 %>
<b><%= column.human_name %>:</b> <%=h page.send(column.name) %>
<% end %>
<% end -%>

eben wrote:

makes sense, thanks for your time