Ruby on rails 将数组作为表列推送到,然后保存模型

Ruby on rails 将数组作为表列推送到,然后保存模型,ruby-on-rails,arrays,ruby,postgresql,Ruby On Rails,Arrays,Ruby,Postgresql,我有一个表,其中一个字段是数组(与以下内容共享:string,array:true,default:[])。当我将某个内容推送到这个数组并保存它时,它不会保存我推送到其中的内容,而是返回到我最初创建它时的状态。以下是将新值推入数组并保存的方法: def new_share @model = Model.find(params[:model_id]) if User.find_by_name(params[:user_name]) != nil @user = User

我有一个表,其中一个字段是数组(与以下内容共享:string,array:true,default:[])。当我将某个内容推送到这个数组并保存它时,它不会保存我推送到其中的内容,而是返回到我最初创建它时的状态。以下是将新值推入数组并保存的方法:

def new_share
    @model = Model.find(params[:model_id])
    if User.find_by_name(params[:user_name]) != nil
      @user = User.find_by_name(params[:user_name])
      @model.shared_with.push(@user.id.to_s)
      if @model.save
        render :json => {:success => true, :message => "User successfully added"}
      else

      end
    else
      render :json => {:success => false, :message => "Cannot find user"}
    end
  end
这是单击按钮时调用的post方法。params[:model_id]返回我想要的模型的正确id,params[:user_id]返回我想要添加到字段中的用户的正确id


有人知道为什么保存时不保存推送的值吗?rails服务器日志中的SQL命令甚至没有说它已经更新了该列(我的数据库是postgresql)。

.push
会在适当的位置对数组进行变异,而不会更新其对象ID:

a = [1,2,3]
a.object_id # => 12011120
a.push(4)
a.object_id # => 12011120
这只是一个理论,但这可能会使模型的
.changed?
方法返回false,这意味着
save
将不起作用

试试这个:

@model.shared_with += [@user.id.to_s]
@model.save

你收到成功的信息了吗?
params[:user\u name]
是否按预期填充?另外,你应该考虑保护你的参数(见),是的,我得到了成功的信息。即使我在rails控制台中手动推送到shared_with字段,然后保存它,它也不会保存!比我快。很好的文章解释了这一点。