Как определить внешний ключ, который указывает на класс с другим именем в ActiveRecord с Rails? - PullRequest
1 голос
/ 12 января 2011

У меня есть модель Follow, которая определяет user_id и follow_user_id.Если вы использовали Twitter, это должно иметь смысл.

Я пытаюсь указать follow_user_id на модель User, чтобы я мог получить доступ к пользователю, за которым следует f.followed_user (таким же образомчто если у меня есть запись с столбцом assign_to: user и столбцом user_id, я могу использовать entry.user для получения пользователя.)

Как я могу это сделать?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 12 января 2011

Проверьте эту заставку
http://railscasts.com/episodes/163-self-referential-association
Он показывает, как в Rails должна быть реализована самоссылочная ассоциация (что вы здесь имеете в виду).


# models/user.rb
has_many :friendships
has_many :friends, :through => :friendships
has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
has_many :inverse_friends, :through => :inverse_friendships, :source => :user

# friendships_controller.rb
def create
  @friendship = current_user.friendships.build(:friend_id => params[:friend_id])
  if @friendship.save
    flash[:notice] = "Added friend."
    redirect_to root_url
  else
    flash[:error] = "Unable to add friend."
    redirect_to root_url
  end
end

def destroy
  @friendship = current_user.friendships.find(params[:id])
  @friendship.destroy
  flash[:notice] = "Removed friendship."
  redirect_to current_user
end
0 голосов
/ 05 марта 2011

В этой статье вы узнаете, что именно вам нужно знать о том, как решить эту проблему:

http://www.spacevatican.org/2008/5/6/creating-multiple-associations-with-the-same-table

Прямо из статьи:

class Sale < ActiveRecord::Base
  belongs_to :buyer, :class_name => 'User', :foreign_key => 'buyer_id'
  belongs_to :seller, :class_name => 'User', :foreign_key => 'seller_id'
end

class User < ActiveRecord::Base
  has_many :purchases, :class_name => 'Sale', :foreign_key => 'buyer_id'
  has_many :sales, :class_name => 'Sale', :foreign_key => 'seller_id'
end

В статье подробно объясняется, что, почему и как.

0 голосов
/ 12 января 2011

Вы можете сделать это так:

belongs_to :followed_user, :class_name => "User"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...