开发者

How to Nest Models within a Model

开发者 https://www.devze.com 2023-03-21 06:11 出处:网络
Imagine I have two models Film -name -description -duration -year_made -rating -actors Actor -name -d_o_b -biography

Imagine I have two models

Film
-name
-description
-duration
-year_made
-rating
-actors

Actor
-name
-d_o_b
-biography
-films

Actors are nested in a Film and开发者_高级运维 vice versa.

How do I represent this relationship in my Ruby models? Realistically I would have a third table mapping actor_id with film_id.

Whilst adding details to a film I would like to be able to create an actor on the fly(if an actor does not exist create a new one with the name supplied)

Thank you in advance.

ADDITION:

Just found a link to a similar question.


You're looking at a Has and Belongs to Many (HABTM) relationship between the two tables. Read about HABTM relationship in the Rails guides here: http://edgeguides.rubyonrails.org/association_basics.html#has_and_belongs_to_many-association-reference

First you'll need to generate a migration which will look something like this:

class AddActorFilmTable < ActiveRecord::Migration
  def self.up
    create_table :actors_films, :id => false  do |t|
      t.integer :actor_id, :null => :false
      t.integer :film_id, :null => :false
    end
    add_index :actors_films, [:actor_id, :film_id], :unique => true
  end

  def self.down
    drop_table :actors_films
  end
end

and then specify in your models:

class Actor < ActiveRecord::Base
  has_and_belongs_to_many :films
end

class Film < ActiveRecord::Base
  has_and_belongs_to_many :actors
end

This will allow you to use all of the additional Rails methods for this type of relationship. To use this in a form, you could follow RailsCast 17: HABTM Checkboxes - though it's old, it should still apply. Alternatively, you can use a gem like Simple Form to easily generate the associations for you like so:

form_for @actor do |f|
    f.collection_check_boxes :film_ids, Film.all, :id, :name
end
0

精彩评论

暂无评论...
验证码 换一张
取 消