问题
I have the following models:
User (id, name, network_id)
Network(id, title)
What kind of Rails model assoc do I need to add so that I can do:
@user.network.title
@network.users
Thanks
回答1:
so network has_many
users and a user belongs_to
network.
Just add a network_id
to users table if you still haven't and also since it's a foreign_key
is worth indexing it.
rails generate migration AddNetworkIdToUsers
class AddNetworkIdToUsers < ActiveRecord::Migration
def change
add_column :users, :network_id, :integer
add_index :users, :network_id
end
end
In the network model do:
class Network < ActiveRecord::Base
has_many :users
end
In the user model do:
class User < ActiveRecord::Base
belongs_to :network
end
回答2:
According to your database-setup, you just have to add the following lines to your models:
class User < ActiveRecord::Base
belongs_to :network
# Rest of your code here
end
class Network < ActiveRecord::Base
has_many :users
# Rest of your code here
end
In case you have a setup without network_id, you should go with daniels answer.
回答3:
This is my way: run:
$rails generate migration AddNetworkIdToUsers
then config migration file:
class AddNetworkIdToUsers < ActiveRecord::Migration[5.1]
def up
add_column :users, :network_id, :integer
add_index :users, :network_id
end
def down
remove_index :users, :network_id
remove_column :users, :network_id
end
end
来源:https://stackoverflow.com/questions/8555082/how-to-setup-a-one-to-many-relationship