Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何将字符串永久转换为数组_Arrays_Ruby_String - Fatal编程技术网

Arrays 如何将字符串永久转换为数组

Arrays 如何将字符串永久转换为数组,arrays,ruby,string,Arrays,Ruby,String,我有下面的标签字符串 tags = "Investor, Real Estate, property Management" 我期望的输出是 tags = ["Investor", " Real Estate", " property Management"] 我正在创建一个before-validation方法,将标记字符串更改为数组。我正在使用split更改由逗号分隔的字符串 但是,它不会将字符串永久更改为数组,它只是将其显示为数组,但标记仍然是字符串。我需要像split这样的东西!但我

我有下面的标签字符串

tags = "Investor, Real Estate, property Management"
我期望的输出是

tags = ["Investor", " Real Estate", " property Management"]
我正在创建一个before-validation方法,将标记字符串更改为数组。我正在使用split更改由逗号分隔的字符串

但是,它不会将字符串永久更改为数组,它只是将其显示为数组,但标记仍然是字符串。我需要像split这样的东西!但我不相信这是真的。如何在验证之前将字符串永久更改为数组?我打算做一些类似的事情

我的模型

 class Blog::Post
  include Mongoid::Document
  include Mongoid::TagCollectible::Tagged

    before_validation :downcase_tags, :make_array

    validates_presence_of :body, :title, :summary

 ...

    def make_array
      if self.tags.present?
        self.tags.split(",")
        self.tags.save
      end
    end
我的表格如下:

...
    <div class="field">
      <%= f.label :tags %><br>
      <%= text_field_tag 'blog_post[tags]' %>
    </div>
   <br \>
    <div class="actions">
     <%= f.submit("Submit", class: "btn btn-default btn-sm") %>
    </div>
<% end %>
但这在模型中似乎不正确,因为它不应该保存在模型中。如何才能正确地执行此操作


我这样做是因为我正在向博客文章添加标记,标记是一个用逗号分隔的字符串,但我需要数组中的标记来查询它们。

拆分不会更改调用它的对象,您需要明确地说您要更改标记的值

def make_array
  if self.tags.present?
    self.tags = self.tags.split(",")
    # self.tags.save
  end
end
您还可以在控制器中执行以下操作

...
  def create
    @blog_post = Blog::Post.new(post_params)
    @blog_post.date = Time.now
    @blog_post.author = current_super_admin.name
    @blog_post.save
    respond_with(@blog_post)
  end
@blog_post.tags = post_params.fetch(:tags, []).split(',').map(&:downcase).map(&:strip)

那么就不需要在模型中做任何事情了

这是不可能的。Ruby对象无法更改其类。看起来你可能会想到Smalltalk的
变成:
,它可以让一个对象变成另一个对象,可能是另一个类,但是Ruby没有
变成:

请注意,拆分不会去掉空格。你在尝试做类似
str='14'的事情吗;str.replace(14)#=>类型错误:没有将Fixnum隐式转换为字符串
。您可以将任何类的实例替换为同一类的另一个实例,但不能替换为不同类的实例。当然,你可以写
str=14;str=14
。在模型中保存模型的一部分不是很糟糕,还是很糟糕?我认为这很糟糕,您可以添加更多关于对象如何初始化的信息,以及在这之后为什么更改
标记的信息吗?我添加了一些信息。我这样做是因为我正在向一篇博客文章中添加标记,标记是一个由逗号分隔的表单字符串,但我需要数组中的标记来查询它们。@SupremeA您是否也可以添加控制器代码,也许你可以在那里更改标记?我从controllerI添加了create方法我想你是指我最后一次关于删除字段类型并将其保存为字符串然后保存到数组的评论?嗯,也许我的逻辑是错误的,但是删除字段类型确实允许方法完成并保存模型。