Ruby on rails Rails 3接受\u嵌套的\u属性\u似乎正在生成“警告:无法批量分配受保护的属性:”

Ruby on rails Rails 3接受\u嵌套的\u属性\u似乎正在生成“警告:无法批量分配受保护的属性:”,ruby-on-rails,ruby-on-rails-3,nested-attributes,Ruby On Rails,Ruby On Rails 3,Nested Attributes,我有以下两种型号: class Position < ActiveRecord::Base include Stocks belongs_to :trade_set attr_accessible :symbol, :percent, :shares, :open, :close, :trade_set_id, :name def set_stock_info(symbol, name) self.name = name self.symbol = sym

我有以下两种型号:

class Position < ActiveRecord::Base
  include Stocks
  belongs_to :trade_set
  attr_accessible :symbol, :percent, :shares, :open, :close, :trade_set_id, :name

  def set_stock_info(symbol, name)
    self.name = name
    self.symbol = symbol
  end

  def set_position_values(percent, shares, open, close)
    self.percent  = percent
    self.shares  = shares
    self.open  = open
    self.close  = close
  end
如果我使用三个职位记录对交易集记录进行后期更新,我会在日志中收到以下警告:

  Position Load (2.8ms)  SELECT "positions".* FROM "positions" WHERE ("positions".trade_set_id = 7)
WARNING: Can't mass-assign protected attributes: created_at, updated_at
WARNING: Can't mass-assign protected attributes: created_at, updated_at
WARNING: Can't mass-assign protected attributes: created_at, updated_at

我是否不正确地使用accepts\u nested\u attributes\u?我不想对代码中的任何位置创建的或更新的属性进行任何更改。

属性是否应为属性可访问:位置属性?@Waseem,如果OP使用了has_one,那么它将是单数的,但是has_many将需要复数:positions_attributes在框外思考:可能由t.timestamps创建的列与在自己处指定t.datetime创建的列在数据库属性上略有不同:Rails正在使用这一事实来确定这些列不是魔术如果使用t.时间戳,会发生什么?也许可以尝试放置断点/日志语句来确定生成这些警告的确切时间?可能是其他列名中的一个,如open、close、symbol等,把Rails搞砸了?也许你的部分代码实际上正在更新这些字段,而你还不知道?扎巴:你是对的,我的朋友。我只是好奇,为什么你要用字符串来定义列名,例如t.integer共享,而不是用公共轨道方式的符号-t.integer:shares?我想知道使用字符串而不是符号是否会对created_at和updated_at的神奇列产生一些影响。不应该,但也值得一试。注意,您还可以在迁移中用t.references:trade_set替换t.integer trade_set_id。
create_table "positions", :force => true do |t|
    t.string   "symbol"
    t.integer  "percent"
    t.integer  "shares"
    t.decimal  "open"
    t.decimal  "close"
    t.integer  "trade_set_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "name"
  end
  Position Load (2.8ms)  SELECT "positions".* FROM "positions" WHERE ("positions".trade_set_id = 7)
WARNING: Can't mass-assign protected attributes: created_at, updated_at
WARNING: Can't mass-assign protected attributes: created_at, updated_at
WARNING: Can't mass-assign protected attributes: created_at, updated_at