Hey everyone,

I am new to Ruby on Rails and I am having a problem that I can't seem to figure out. I have a mysql database that I created and I have created a model for it. I have did not create a migration, as the database is already full of information. I added a scaffold to the application, and it showed the data from the database with no problems.

I have tried to create a new controller called portfolio, and in this I have an index. Here is the controller code:

class PortfolioController < ApplicationController
  def index
    @stocks = Stock.find_active_symbols

The @stocks is, from what I understand, supposed to contain the rows returned from the database. Below is my Stock Model code:

class Stock < ActiveRecord::Base

  def self.find_active_symbols
    find(:all, :order => "stock_symbol")

Finally, I have a view created in app/views/portfolio/index.rhtml Below is the code from there:

<% for st in @stocks -%>
<%= h(st.stock_symbol) %>
<% end %>

in the database table, I have a column named stock_symbol. When I try and access this view in a web browser, I get the following error message:

undefined method `stock_symbol' for #<Stock:0xb72e11a4>

I don't understand why I am seeing this. Anyone have any ideas?

Thanks for the help in advance.


9 Years
Discussion Span
Last Post by stupidenator

Looking at your code I can't see whats wrong.

What happens if in your view you do

<% for st in @stocks -%>
<%= h(st.inspect) %><br />
<% end %>

It may give a clue as to what's wrong.


Since you're working with a MySQL database that's already full of data, do they follow Rails conventions? I.e., are the table names plural (e.g., the table corresponding to the Stock model should be named "stocks") and does each table with a Rails model class have an "id" field that's its primary key?

If not, that would cause problems (though I'm not sure if it would cause the problem you're seeing at the moment).




I believe that is the problem. I added a column called id and set it as the primary key and now it seems to work fine. Thank you for your help.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.