在Ruby on Rails上推送到一个数组

时间:2016-04-13 18:21:09

标签: ruby-on-rails arrays ruby activerecord rails-activerecord

我正在尝试在我的模型中创建一个字符串数组,在那里我可以将新字符串(ID)推送到字符串数组中 - 但是它没有推送正确的值。

以下是模型的外观:

class CreateCompanies < ActiveRecord::Migration
  def change
  create_table :companies do |t|

  t.string :name
  t.string :email
  t.string :users, array: true, default: []
  t.timestamps null: false
  end
 end
end

以下是我如何在Controller中向数组中添加新值:

c = Company.new
c.users << @user.id
c.save

确实会将值添加到数组中,但它不是ID,而只是一些随机值,如下所示:

users: "--- []\n\u{478A6}"

现在已经坚持了几天 - 有谁知道我错过了什么?

更新 添加了我创建新公司的代码

 def create
@user = User.new(user_params)
if @user.save

  @user.id = SecureRandom.random_number(999999)
  session[:user_id] = @user.id

  c = Company.new
  c.id = SecureRandom.random_number(999999)
  c.name = @user.company_name
  c.email = "email goes here"
  c.users << @user.id
  c.save

  @user.company_id = c.id
  @user.save

  redirect_to '/dashboard'
else
  redirect_to '/'
end
end

2 个答案:

答案 0 :(得分:4)

如果您正在尝试建立一对多关系,那么您应该将company_id字段添加到users表,将belongs_to :company添加到您的app/models/user.rb 1}}并将has_many :users添加到app/models/company.rb

然后,您就可以像您需要的那样访问用户。

<强>更新

如果您想与用户一起创建公司,您可以这样做。

@user.company = Company.create name: 'Some name'

甚至更好地避免重复。

@user.company = Company.find_or_create_by name: 'Some name'

答案 1 :(得分:0)

我想知道你是否想要构建多对多的关系,最好的方法是使用多对多表而不是将所有id作为数据库中的数组字符串存储;

如果你想这样存储,最好的方法应该是形成一个字符串而不是直接放入数组。对于像array.join()这样的东西对你很有帮助。

如果你仍坚持自己的方式,也许你应该尝试使用array.push()而不是&lt;&lt;