1

如何使用 ActiveScaffold 1.2RC1 为文本输入设置默认值?

对于更高版本,它看起来像这样(来自http://activescaffold.com/2010/7/21/changes-in-naming-schema-for-overrides)应该工作:

module PlayersHelper
  def player_name_form_column(record, options)
    text_field :record, :name, options.merge(:value => record.name || 'new player')
  end
end

但在1.2RC1中出现,列形式覆盖方法将输入名称作为第二个参数。我试过这个:

module PlayersHelper
  def player_name_form_column(record, _)
    text_field :record, :name, {:value => record.name || 'new player'}
  end
end

但它没有任何效果。

更新

我的第二次尝试确实奏效了。事实上,这两种方法都有效:

    text_field :record, :name, {:value => record.name || 'new player'}
    text_field :record, :name, :value => (record.name || 'new player')

有趣的是,ActiveScaffold 实际上会将数据库中列的默认值传播到输入表单!我的玩家表如下所示:

mysql> show create table players\G
*************************** 1. row ***************************
       Table: players
Create Table: CREATE TABLE `players` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) DEFAULT 'Manny Ramirez',
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

所以record.name实际上设置为“Manny Ramirez”,这意味着我从未见过我的默认值。所以这里正确的做法似乎是修改数据库中的默认值,因为盲目地设置值会破坏编辑(即如果玩家的名字是'David Ortiz',点击编辑会弹出一个具有所有大卫属性的玩家,但名称设置为“Manny Ramirez”。

4

1 回答 1

5

试试吧:value => "Something"

于 2011-03-14T13:24:08.457 回答