2012-03-29 42 views
2

假设我有两个模型,一个属于另一个。现在,通常填充字段时,您会将对象分配给关联。 rails是否允许覆盖set方法,以便可以自定义关联分配?使用字符串分配栏关联

E.g

class Person 
    # something about shirts 
end 

class Shirt 
    belongs_to :person 

    def person=(p) 
    self.person = Person.find_or_create_by_name(p) 
    end 
end 

然后使用类似这样的自动绑定的关联,但使用字符串做搜索和自动绑定。这可能吗?

S = Shirt.new

s.person = “测试人”

感谢

回答

3

ROR指南覆盖association extension你的需要。

更新: 其实,一旦你明白你在做什么,重写的二传手并不是那么糟糕。但是你必须小心,因为它会导致无限循环(如你的例子)。所以如果你使用的是Rails 3.2,你必须要use super,否则你必须使用alias_method_chain

+0

谢谢你,一定错过了链接。链接描述了如何制作新的方法。重写Rails关联setter被认为是不好的做法?因为这是我最初试图做的 – pieterk 2012-03-30 20:53:56

+0

@Onyth我已经添加了解释说明 – 2012-03-31 14:11:17

+0

谢谢你的解释。这绝对清除了我对AR关联方法的一点误解。 – pieterk 2012-03-31 19:14:50