如何使用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',点击编辑会弹出一个具有David所有属性的玩家,但名字设置为'Manny Ramirez'。
答案 0 :(得分:5)
尝试:value => "Something"