Hi, I have a form with a set of fields. All these fields belong to a table called Textmaze. One of the form fields is a list box. This list box gets it's values from an existing table called Scenario in the database. On submission of the form, it should create a record in a table. Connection between these two tables looks like this: class Textmaze < ActiveRecord::Base belongs_to :starting_scenario, :class_name => "Scenario", :foreign_key => "starting_scenario" --- end My form code looks like this: --- <select id="textmaze_starting_scenario" name="textmaze[starting_scenario]"> <% @scenarios.each do |scenario| %> <option value="<%= scenario %>"> <%= scenario.title %> </option> <% end %> </select> ---- When I submit the form I get an error saying "Scenario expected, got String" Instead of <option value="<%= scenario %>"> I tried supplying the id of the Scenario record but even that doesn't seem to work. What could be wrong? How can I get reference to another table's record into my table?
on 2007-01-02 12:33
on 2007-01-02 13:39
Hi, I think you better use the built in select_option method from Ruby On Rails. If you would have in your text_maze_controller.rb something like this: def 'edit' @textmaze = Textmaze.find(params[:id]) @scenarios = Scenario.find(:all) end then you can use in your _form.rhtml view of your Textmaze something like this: <%= collection_select("textmaze","starting_scenario",@scenarios,"id","title") %> It helps to keep the view clean. This answer comes from a ROR user for four evenings. Best regards, Mark Noten
on 2007-01-02 14:03
>From your description, it seems the problem is in the form action method inside your controller. By the way, yes, you should code the option value as <option value="<%= scenario.id %>">. This will provide the key for doing a find on Scenario. The error is saying you supplied a string, rather an instance of Scenario, probably as a parameter to something. I would check your code that deals with Scenario. If you get stuck post the code up here. -Paul