Ассоциация Active Record от одного ко многим

У меня вопрос к моим текущим ассоциациям Active Record.

Я создаю систему комментариев на основе вопроса (очень похожую на stackoverflow).

Я смотрю на ассоциацию, и у пользователя много комментариев, а комментарий принадлежит пользователю.

Теперь, когда я делаю настоящий комментарий, user_id должен быть включен в поле user_id моего комментария, так как я создаю ассоциацию, правильно?

Вот моя схема:

create_table "users", force: true do |t|
    t.string   "email",                              default: "", null: false
    t.string   "encrypted_password",                 default: "", null: false
    t.integer  "question_id",            limit: 255
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",                      default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "provider"
    t.string   "uid"
    t.string   "name"
  end

create_table "comments", force: true do |t|
    t.integer  "user_id"  **THIS IS WHERE I AM EXPECTING A JOIN AND WHEN A USER MAKES A COMMENT TO HAVE THE USER_ID NUMBER STORED HERE
    t.integer  "question_id"
    t.text     "comment"
    t.integer  "upvotes"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

Вот мои ассоциации Active Record:

USER.RB:

class User < ActiveRecord::Base
  has_many :questions
  has_many :comments
  has_many :votes

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable, :omniauthable,
         :recoverable, :rememberable, :trackable, :validatable


      def self.from_omniauth(auth)
        where(auth.slice(:provider, :uid)).first_or_create do |user|
          user.provider = auth.provider
          user.uid = auth.uid
          # user.username = auth.info.nickname
          user.email = auth.info.email
          user.name = auth.info.name
        end
      end

      def self.new_with_session(params, session)
        if session["devise.user_attributes"]
          new(session["devise.user_attributes"], without_protection: true) do |user|
            user.attributes = params
            user.valid?
          end
        else
          super
        end
      end

      def password_required?
        super && provider.blank?
      end

      def update_with_password(params, *options)
        if encrypted_password.blank?
          update_attributes(params, *options)
        else
          super
        end
      end
end

Комментарий.rb:

class Comment < ActiveRecord::Base
  belongs_to :question
  belongs_to :user
  has_many :votes
end

Моя конечная цель состоит в том, чтобы моя схема комментариев регистрировала user_id при создании нового комментария, связывая комментарий с пользователем.

Прямо сейчас мой user_id равен "nil"

** Это бэкэнд рельсов во внешнем интерфейсе Backbone.


person HelloWorld    schedule 07.12.2013    source источник
comment
Вы не поделились контекстом (например, кодом и выводом), где user_id равно nil, поэтому сложно ответить на этот вопрос.   -  person Peter Alfvin    schedule 08.12.2013
comment
Извините, Питер, это то, что вы ищете, это обычный запрос из моей консоли rails, это то, что Comment.last возвращает # ‹Comment id: 95, user_id: nil, question_id: 260, comment: TEST22, upvotes: 0 , created_at: 2013-12-07 20:19:03, updated_at: 2013-12-07 20:19:03 ›   -  person HelloWorld    schedule 08.12.2013
comment
Хорошо, это объясняет, как вы его смотрите, но все же оставляет открытым вопрос о том, как вы его создали. Помог ли мой ответ?   -  person Peter Alfvin    schedule 08.12.2013


Ответы (1)


Нет, поле user_id связанной записи будет заполнено "автоматически" только в том случае, если вы создадите его через связь, как в:

user.comments << Comment.create(...)

См. http://guides.rubyonrails.org/association_basics.html#has-many-association-reference, чтобы узнать о других возможностях. Конечно, вы также можете установить user_id вручную.

person Peter Alfvin    schedule 07.12.2013