2013-11-26 18 views
0

У меня есть эти фрагменты кода (я только учусь RoR кстати, поэтому, пожалуйста, успокойтесь на меня, я сделал некоторые погуглите уже;)):Рубин (на рельсах) ассоциации

class CreateMicroposts < ActiveRecord::Migration 
    def change 
    create_table :microposts do |t| 
     t.string :content 
     t.integer :user_id 

     t.timestamps 
    end 

    add_index :microposts, [:user_id, :created_at] 
    end 
end 

и это

class Micropost < ActiveRecord::Base 
    belongs_to :user 
    validates :user_id, presence: true 
end 

и это одна:

class User < ActiveRecord::Base 
    has_many :microposts 
    end 

Там нет ничего сложного здесь происходит. Я все понимаю. Одна вещь, которую я не получаю, хотя эта цитата (по поводу учебника Майкла Hartl, что я читаю):

После того, как мы определяем соответствующие ассоциации, в результате @micropost переменной будет автоматически имеют user_id равный его ассоциированному пользователю.

Теперь как Rails может это сделать и почему это делается автоматически? Любые усилия по разъяснению этого будут высоко оценены.

+0

извините, но это не подходящее место, чтобы задать такой вопрос. Вы можете попросить об этом в рубине на форуме рельсов. – jvnill

+0

И учебник должен объяснить это (или, еще лучше, книга Rails действительно подробно объясняет). [Рельсы Rails также довольно хорошо покрывают его] (http://guides.rubyonrails.org/association_basics.html). –

ответ

1

Рельсы - это все о «конвенции по конфигурации», идея в том, что если вы играете по определенному числу правил, то Rails может позаботиться о многом для вас. Когда вы говорите: «У пользователя много микропотоков, а Micropost принадлежит пользователю в каждой модели, Rails автоматически знает, что поле user_id в таблице Microposts указывает на поле id в модели User, а поле micropost_id в таблице User указывает на . ассоциированная идентификатор поля в Microposts Вы можете сделать это:

@ user.microposts, чтобы получить все микро-сообщения для этого пользователя @ micropost.user, чтобы получить пользователю о microspost

для этого ". магия "для работы, вам нужно объявить аргументы« есть много »и« принадлежит »в самих моделях, и правильно назовите их« user_id »и micropost_id, иначе это не сработает.

+0

, поэтому вы пытаетесь сказать, что при создании модели, если бы я создал 'usr_ids' вместо' user_id', это не сработало бы. что Rails ищет слова 'user' и' id' правильно? – Emanuel

+0

Да, вот как он знает, что они принадлежат друг другу. Именование важно. Существует разница между User.microposts и Micropost.users. Множественное число - это «много» отношения, а единственное - «одно». – fatfrog

+0

большое спасибо. я бы не знал, как еще Rails может «автоматически» это знать. – Emanuel

Смежные вопросы