Проблема с has_many: через ассоциацию в Ruby on Rails - PullRequest
0 голосов
/ 20 декабря 2009

У меня проблема с has_many: через ассоциацию я не могу вызвать метод u1.UsersProfileAttributes.find_by_ProfileAttribute_name("icq"), rails означает, что этот метод не существует Метод u1.UsersProfileAttributes.find_by_ProfileAttribute_id(3) работает правильно. u1 - объект пользователя. Я не знаю, в чем проблема, потому что мои ассоциации, кажется, в порядке. Посмотрите:

class ProfileAttribute < ActiveRecord::Base
  has_many :UsersProfileAttributes
  has_many :users, :through => :UsersProfileAttributes
end
class User < ActiveRecord::Base
  has_many :UsersProfileAttributes
  has_many :ProfileAttributes, :through => :UsersProfileAttributes
end
class UsersProfileAttribute < ActiveRecord::Base
  belongs_to :user
  belongs_to :ProfileAttribute
end

Файл моей миграции:

    class CreateProfileAttributes < ActiveRecord::Migration
      def self.up
        create_table :profile_attributes do |t|
          t.string :name
          t.integer :profile_group_id
          t.timestamps
        end
    create_table :users_profile_attributes do |t|
      t.integer :user_id
      t.integer :ProfileAttribute_id  
      t.string :value
    end
  end
  def self.down
    drop_table :profile_attributes
    drop_table :users_profile_attributes
  end
end

1 Ответ

2 голосов
/ 20 декабря 2009

Вам необходимо запрашивать атрибуты ProfileAttributes, а не UsersProfileAttributes. Это должно работать для вас: u1.ProfileAttributes.find_by_name('icq')

u1.UsersProfileAttributes.find_by_ProfileAttribute_id(3) работает, потому что ProfileAttribute_id является атрибутом UsersProfileAttribute ... поэтому ActiveRecord создает вам динамический искатель.

u1.UsersProfileAttributes.find_by_ProfileAttribute_name("icq") не работает, потому что ProfileAttribute_name не является атрибутом UsersProfileAttribute.

...