Hello, I'm new to this list (and rails, too).
I have a problem with has_and_belongs_to_many. I can't find a real example for read the data from the other db-table. Can't view this data. I have some images with any tags. One image can have many tags and a tag can have many images -> many-to-many.
I have write this code:
MY DATABASE (MySQL):
CREATE TABLE images ( `id` INT NOT NULL auto_increment, `image_url` VARCHAR(200) NOT NULL, PRIMARY KEY (id) );
CREATE TABLE tags ( `id` INT NOT NULL auto_increment, `name` VARCHAR(100) NOT NULL, PRIMARY KEY (id) );
CREATE TABLE images_tags ( `image_id` INT NOT NULL, `tag_id' INT NOT NULL, CONSTRAINT fk_cp_image FOREIGN KEY (image_id) REFERENCES images(id), CONSTRAINT fk_cp_tag FOREIGN KEY (tag_id) REFERENCES tags(id), PRIMARY KEY (image_id, tag_id) );
MY DB-VALUES:
images-table:
id | image_url | 2 | http://www.rubyonrails.com/images/rails.png |
tags-table:
id | name | 1 | Rails |
images_tags-table:
image_id | tag_id | 2 | 1 |
MY MODELS:
models/image.rb: class Image < ActiveRecord::Base has_and_belongs_to_many :tags end
models/tag.rb: class Tag < ActiveRecord::Base has_and_belongs_to_many :images end
Now, I will display in the images-view the tags for an image. So I must find all tags for a selectet image:
controllers/images_controller.rb (create by scaffold): def show @image = Image.find(params[:id]) @tag = Tag.find(params[:id]) end end
views/images/show.rhtml: Tags: <%=h @tag.name %>
But this will search a tag-ID 2 (because, i have select image 2) and not the tags, for image-ID 2. "@tag=Tag.find(1)" will return "Rails", this work. How can I find all Tags for a image-ID? And for many tags for one image, it will create an array? Thanks for help!
Martin