Создание колонки созданного_байом и связь с рельсами? - PullRequest
2 голосов
/ 22 августа 2009

Вздох ... Я чувствую себя большим новичком в этом, так скажем, у меня есть несколько моделей:

class Question < ActiveRecord::Base
  has_many :answers
  belongs_to :user
end

class Answer < ActiveRecord::Base
  belongs_to :question
  has_one :user
end

class User < ActiveRecord::Base
  has_many :questions
  has_many :answers, :through => :questions
end

поэтому моя проблема в том, что я не знаю, как получить пользователя, который создал вопрос или ответ, пользователь должен определить, когда вопрос создан (или создан ответ), а пользователь должен исходить из сеансы пользователя (из модели пользователя и контроллера authlogic) см. здесь:

class ApplicationController < ActionController::Base

  helper_method :current_user_session, :current_user

  ...

  private

  def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find
  end

  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.user
  end

end

Теперь, вспомогательный метод current_user работает нормально, но как мне установить, какой пользователь создал вопрос или ответ? как id хотел бы просто сказать @ question.user

Кстати, моя схема для моего вопроса имеет столбец create_by, но когда я создаю новый вопрос, он остается пустым.

Ответы [ 2 ]

5 голосов
/ 30 мая 2017

Другой способ связать представление (Rails 4 и 5)

belongs_to :created_by, class_name: "User", foreign_key: "created_by_id"

если необходимы две или более ассоциации с одним классом (т. Е. «Пользователь»).

Пример: Я хотел бы создать пользователя (: электронная почта,: пароль) и связать его с профилем (: имя,: фамилия). Но я также хотел бы добавить Пользователю возможность создавать профили других пользователей с их: электронными письмами (и в дальнейшем отправлять им приглашения).

  1. создать Профиль (принадлежит_ Пользователь ) и Пользователь (has_one Профиль ). Эта ассоциация создает столбец user_id в таблице Профили .

  2. В сгенерированных Профайлах Файл миграции таблиц добавить эти строки:

    t.belongs_to :user, index: true, optional: true
    

    Итак, ассоциация становится:

    «Пользователи 1 - 1..0 Профили», тип связи (поэтому профиль может иметь и не иметь user_id )

  3. Добавьте ассоциацию, упомянутую вверху, в Профиль модель.

    belongs_to :created_by, class_name: "User", foreign_key: "created_by_id" 
    
  4. Добавить @user.created_by = current_user в профиль # создать действие

4 голосов
/ 22 августа 2009

вместо вызова столбца created_by предпочтительным способом является присвоение имени столбцу user_id. использование этих имен для внешних ключей позволит rails «видеть» ассоциации автоматически.

Простой способ установить атрибут в контроллере - это использовать блок как таковой:

@question = Question.new(params[:question]) do |q|
q.user_id = current_user.id
end
@question.save
...