0

我想使用 FriendlyId 来实现这一点localhost3000/users/edu/profile,但我不知道该怎么做!我有这些模型 User 和 UserProfile

class User < ActiveRecord::Base
  has_one :user_profile, :dependent => :destroy
  extend FriendlyId
  friendly_id :name, :use => :slugged
end  

class UserProfile < ActiveRecord::Base
  attr_accessible :user_id, :name, :surname, :nickname
  belongs_to :user 
end

如何加载UserProfilename的用户?name以及当 UserProfile 的名称更改时如何更新用户的名称?

我第一次使用

class User < ActiveRecord::Base
...

  def name
    if user_profile
      "#{user_profile.name}"
    end  
  end

但是当我在 UserProfile 中更新或创建新的配置文件时,我无法更改它。

使用 Ruby 1.9.3 和 Rails 3.2.13。

4

1 回答 1

0

如果我理解正确,您的问题是关于模型之间共享数据,而不是关于 FriendlyId。

这似乎delegate是你最好的选择。它是 ActiveSupport 中的一种方法,它允许一个模型将另一个模型的方法公开为自己的。

class User < ActiveRecord::Base
  delegate :name, :name=, :to => :user_profile
end

参考:http ://api.rubyonrails.org/classes/Module.html#method-i-delegate

委托两者的原因:name:name=,前一种方法允许您从该属性中读取(getter),而后者允许您写入它(setter)。

在进行这些更改之前,您需要运行迁移以从数据库中name的表中删除该字段users,因为从现在开始您将使用其他模型中的数据。

rails g migration remove_name_from_users name:string
于 2013-05-15T01:48:16.217 回答