2014-04-25 142 views
0

我不理解的东西,我有一个模型在轨道有两种方式分配标签的职位,一个是通过一个数组,另一个是单数。这是为什么传递一个字符串而不是数组?

def tag_names=(names) 
    self.tags = names.map{ |name| Tag.where(name: name).first_or_create } 
    end 

    def tag_name=(tag_name) 
    single_tag = [tag_name] 
    tag_names = single_tag 
    end 

如果对这个职位模型,你拨打:@post.tag_name = ['asdsad', '12312312']你得到分配给后

两个标签。如果你这样做:@post.tag_name = '23423423'你什么也得不到,而测试失败了,这样做的原因是,如果你把puts names在上面的方法,随之而来通过不是一个数组而是一个字符串,即使我做:

single_tag = [tag_name] 
    tag_names = single_tag 

我在做什么错?

回答

1

变化

def tag_name=(tag_name) 
    single_tag = [tag_name] 
    tag_names = single_tag 
    end 

def tag_name=(tag_name) 
    single_tag = [tag_name] 
    self.tag_names = single_tag ## Note self.tag_names 
    end 

目前tag_names被视为本地变量,以便你的方法tag_name=是没有得到调用。你需要为setter方法指定一个明确的接收者。 self.tag_names = single_tag会调用tag_name=方法。

相关问题