我不理解某些东西,我在rails中有一个模型,有两种方法可以为帖子分配标签,一种是通过数组,另一种是单数。
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
我做错了什么?
答案 0 :(得分: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=
方法。