Добавление внешних ключей в базу данных rails - PullRequest
0 голосов
/ 07 марта 2012

У меня сейчас проблема, и я не уверен, что мне делать.Это касается отношений между таблицами и необходимости внешних ключей.

У меня есть две таблицы в моей базе данных;пользователи и игры.Пользователи включают всю информацию о пользователях (имя пользователя, адрес электронной почты, адрес, пароль и т. Д.). В игры входит вся информация об играх (имя, жанр, консоль user_id).Как вы, возможно, заметили, игровая таблица включает в себя идентификатор пользователя, чтобы связать отношения между ними, для которых каждой игре нужен ассоциированный пользователь.

То, что я хочу сделать, это в каждой игре show.html.erbНа этой странице у меня есть кнопка, которая должна отправить электронное письмо владельцу этой игры, чтобы сообщить им, что зарегистрированный в данный момент пользователь заинтересован в торговле этой игрой.

Мне интересно, как бы я это сделал?,Является ли user_id автоматически связать все данные, связанные с пользователями или только идентификатор.Если нет, то как бы я объявил электронную почту пользователей в качестве внешнего ключа, чтобы я мог позвонить по электронной почте для отправки пользователям?

Любая помощь будет принята с благодарностью.Спасибо

Кристофер Джонс

ОБНОВЛЕНИЕ

Эй, у меня было следующее в моем разделе show games_controller, и оно не работало.Он выдал следующую ошибку: неопределенный метод `email 'для" chris230391@googlemail.com ": String.

def show
@game = Game.find(params[:id])

respond_to do |format|
  GameTrade.game_interest(@game.user.email).deliver
  format.html { redirect_to root_url }
  format.json { render json: @game }
end
end

Поэтому я изменил его на следующий, чтобы разбить проблему и выяснить, какая строкаэто сломалось, и это заявило, что блок был в строке 19, которая является строкой g = GameTrade.game_interest (email).Я получил следующую ошибку:

неопределенный метод `email 'для" chris230391@googlemail.com ": String

Есть идеи?код ниже

def show
  @game = Game.find(params[:id])

respond_to do |format|
  user = @game.user
  email = user.email
  g = GameTrade.game_interest(email)
  g.deliver
  format.html { redirect_to root_url }
  format.json { render json: @game }
end
end

Ниже приведен код моего Game_trade.rb в разделе почтовой программы:

  class GameTrade < ActionMailer::Base
    default :from => "christopher@aol.com"

    def game_interest(user)
      @user = user
      mail :to => user.email, :subject => "Game Interest"
    end
   end

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Взгляните на этот вопрос переполнения стека, касающийся Rails и ссылочной целостности . Возможно, вы захотите заглянуть в гем иностранец для добавления и удаления внешних ключей во время миграции Rails.

Тем не менее, мне любопытно, почему вы создаете ограничения внешнего ключа помимо ограничений игры -> пользователя, которые у вас уже есть. Есть ли причина, по которой вы денормализуете поля имени пользователя и адреса электронной почты?

1 голос
/ 07 марта 2012

Строка GameTrade.game_interest(@game.user.email).deliver
вызывает метод game_interest в модели GameTrade.
(Пожалуйста, оставьте также этот код.)

Этот метод ожидает параметр и не получает его.

Я бы также подумал о том, чтобы и метод, и вызов были для
game_interest_deliver(@game.user.email).

Я работал в хранилищах данных sql 5 лет и поначалу меня очень смущали рельсы и внешние ключи.Главный урок, который я усвоил, - не добавлять их соответствующим образом, а больше сосредоточиться на коде, моделях и методах ruby ​​для достижения правильных результатов.

...