almartin
(almartin)
August 21, 2008, 8:39pm
1
Hi, I'm in the process of learning ruby on rails so this will be one
of many posts by me when I can't find the solution by googling.
I have set up a polymorphic relationship that I can't get to work when
storing data.
def self.up
create_table :table_labels do |t|
t.column :label_type, :string
t.column :label_id, :integer
t.column :english, :text
t.timestamps
end
create_table :menus do |t|
t.column :name, :string, :limit=>50
t.column :parent_id, :integer
t.column :position, :integer
t.column :main, :boolean
t.column :footer, :boolean
t.column :active, :boolean
t.column :controller,:string, :limit=>50
t.column :action, :string, :limit=>50
t.timestamps
end
end
class Menus < ActiveRecord::Base
acts_as_list
acts_as_tree
has_one :table_labels, :as => :label
validates_presence_of :name, :english, :parent_id
validates_uniqueness_of :name
end
class TableLabels < ActiveRecord::Base
belongs_to :label, :polymorphic => true
end
def add_menu
newmenu = Menus.new(:name => params[:label][:name], :parent_id =>
params[:label][:parent_id])
newlabel = TableLabels.new(:english => params[:label][:english])
newlabel.label = newmenu
newlabel.save!
render :action => :list_menus
end
What happens is a row is added to the table_labels but with a NULL
entry for label_id and nothing is added to menus table.
What am I missing?
can anyone help?
What happens is a row is added to the table_labels but with a NULL
entry for label_id and nothing is added to menus table.
Try saving the newmenu object before you assign it.
Fred
almartin
(almartin)
August 22, 2008, 5:20pm
3
Tried that with newmenu.save and the same thing happens.
however if I use newmenu.save! I get the error English can't be blank,
even though it isn't
Shouldn't rails be creating a JOIN in the sql? at the moment in the
trace is shows both tables being loaded seperately.
I'm sure it's just me not yet understanding how table relationships
work.
Can any one help?
Tried that with newmenu.save and the same thing happens.
however if I use newmenu.save! I get the error English can't be blank,
even though it isn't
Well if there is a failing validation you need to fix it since rails
won't save it
almartin
(almartin)
August 22, 2008, 9:07pm
5
Perhaps I need to explain how I wish this to work
I have a form on a page that adds a new menu item. the form consists
of the menu name, name in english (other languages will be added
later) and parent_id (from dropdown list of menu items).
When you submit I want the data to be added to the database like this
Menus.name = > post.name
Menus.parent_id => post.parent_id
TableLabels.english => post.english
TableLabels.label_id => Menus.id
TableLabels.label_type => Menus
How do I write the code to achieve this?
. If I wrote it in php - sql it would look like this.
$sql1 = "INSERT INTO menus (name, parent_id) VALUES ('".
$_POST['name']."',".$_POST['parent_id'].")";
$sql2 = "INSERT INTO table_labels (menu_id,menu_type,english) VALUES
(".mysql_insert_id().",'menus','".$_POST['english']."')";
Anyone?
almartin
(almartin)
August 22, 2008, 10:06pm
6
I fixed it!
The problem was so simple
I had the validation for the english field in the wrong class, it
should have been in the TableLabels class and not the Menus class.
works perfectly now.