Ошибка отсутствия метода при попытке прочитать атрибут из модели соединения - PullRequest
0 голосов
/ 17 октября 2011

У меня есть проекты, и пользователи присоединились через has_many: через модель соединения, называемую владельцем.У каждого владельца есть атрибут owner_type, к которому я хочу получить доступ.

Я хочу иметь способ передать user_id в модель проекта и получить owner_type через модель соединения владения.И наоборот, я хочу передать project_id пользовательской модели и получить owner_type через модель присоединения владения.Вот что у меня есть:

class Project < ActiveRecord::Base
  attr_accessible :name, :description

  has_many :ownerships
  has_many :users, :through => :ownerships

  validates :name, :presence => true,
                   :length => { :maximum => 50 }

  def owner_type?(user_id)
    @user_id = user_id
    @ownership = self.ownerships.where(:user_id => @user_id)
    @ownership.owner_type
  end

end

class User < ActiveRecord::Base
  attr_accessible :name, :email, :admin

  has_many :ownerships
  has_many :projects, :through => :ownerships

  accepts_nested_attributes_for :projects

  email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

  validates :name, :presence => true,
                   :length => { :maximum => 50 }

  #validates :email, :presence => true,
  #                  :format => { :with => email_regex },
  #                  :uniqueness => { :case_sensitive => false }

  validates_inclusion_of :admin, :in => [true, false]

  def self.create_with_omniauth(auth)
    create! do |user|
      user.provider = auth["provider"]
      user.uid = auth["uid"]
      user.name = auth["user_info"]["name"]
      user.admin = false
    end
  end
end

class Ownership < ActiveRecord::Base
  attr_accessible :owner_type

  belongs_to :project
  belongs_to :user

  validates :user_id, :presence => true

  validates :project_id, :presence => true

  validates :owner_type, :presence => true

end

, а затем в моем проекте # show page:

<%= @project.owner_type?(current_user.id) %>

что я делаю не так?Как я могу получить доступ к атрибуту owner_type из модели собственности из любого места?Это никогда не работает.

1 Ответ

1 голос
/ 17 октября 2011

Вы не вставили фактическую ошибку, которую получаете.Но вот что я думаю, что идет не так.

ownerships - это has_many отношения.Он вернет вам коллекцию результатов, всегда.Таким образом, @ownership = self.ownerships.where(:user_id => @user_id) вернет вам массив.Так что вы, вероятно, должны делать, если ожидаете только 1 результат.

@ownership = ownerships.where(:user_id => @user_id).first
@ownership.owner_type

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...