修改关系关联

时间:2013-02-12 23:09:45

标签: ruby-on-rails-3

我正在开发一个微型社交网络,我有两种不同的帐户类型,用户可以是个人资料或页面。

class User < ActiveRecord::Base

  has_one :profile
  has_one :page

end

现在,当我想显示用户名时,我会执行current_user.profile.name,但如果用户是“页面”,我显然会收到错误。

所以我试过这个

private
  def current_user
    if session[:user_id]
      @current_user = User.find(session[:user_id])

      if @current_user.account_type == 'profile'
        @current_user.profile = @current_user.page
      end

    end
  end

但它不起作用。

非常感谢任何帮助。非常感谢!

1 个答案:

答案 0 :(得分:0)

我不确定你在问什么,但你可以为User模型添加一个方法来处理这个问题:

class User < ActiveRecord::Base

  has_one :profile
  has_one :page

  def name
     if self.account_type == 'profile'
        return self.profile.name

     return <whatever for page>
  end
end

修改

对于多个字段,为什么不使用User的方法:

class User < ActiveRecord::Base

  # other code removed

  def get_info(method, *args)
      if self.account_type == 'profile'
          return self.profile.send(method, *args)
      end
      self.page.send(method, *args)
  end 
end

因此,要使用此功能,请说我们a = User.find(:id)包含任何id。然后,您可以这样做,假设a的{​​{1}}是account_type

profile