为什么这会传递字符串而不是数组?

时间:2014-04-25 23:17:18

标签: ruby-on-rails arrays

我不理解某些东西,我在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

我做错了什么?

1 个答案:

答案 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=方法。