使用new()方法填充表单

时间:2011-04-13 15:19:40

标签: ruby-on-rails ruby

问题解决了。 HTML5 localStorage与我搞混。

我正在尝试使用new()方法中的参数填充表单,但我无法使其工作。

每个用户都有保存在数据库中的表单的默认值(在名为defaults的表中),当您创建新记录时,我希望使用该表中的值填充它。

@default = Default.find_by_user_id(current_user.id)
@invoice = Invoice.new(:title => @default.title, :company_information => @default.company_information)

render 'create'

然后在我看来:

form_for @invoice, :url => { :action => "create"} do |f| ...

会发生发票的默认值,但不会创建在new()方法中创建的值。

最奇怪的是,当我在加载页面后检查源代码时,输​​入值属性会填充正确的信息,但不会在页面上呈现...

2 个答案:

答案 0 :(得分:1)

你在这做什么:

Invoice.new(:title => @default.title, :company_information => @default.company_information)

有道理并且应该有效......除非这些字段受到质量分配的保护。

class Invoice << ActiveRecord::Base
  attr_accessible :some, :other, :fields
  ...
end

这可以让您在初始化Invoice对象时设置:some, :other, (and) :fields,但这会阻止您设置任何其他“属性”。

答案 1 :(得分:0)

奇怪的是,我没有看到你想要做的事情有什么问题...也许浏览器方面的某些东西(javascript,css等)正在喋喋不休?

检查表单输入中是否有可选择的内容,或尝试创建没有任何javascript或css的vanilla表单。或者,您甚至可以尝试使用以下内容在html中打印属性的内容(不使用input / textarea标记):

<%= @invoice.title %>

这至少有助于确认默认值确实设置。另外,使用:

<%= f.object.title %> # place me inside the form_for block

将帮助您确认表单构建器实例也具有正确的值。

祝你好运。