0

我有一个 RoR 应用程序,脚手架生成为我的模型提供了新的和编辑操作。在视图中,有一个 _form.html.erb。此表单具有两个字段的输入,这两个字段也恰好是 attr_accessible,但没有输入字段如created_at,updated_atid

我想为我的所有模型生成一些自定义的其他表单和视图。我想知道如何以编程方式找到应该手动设置的字段,以及 Rails 设置的字段。如果我有一个模型 Widget,那么 Widget.columns 会给出所有字段。

Rails 脚手架生成如何知道将哪些字段放入表单中。此外,是否有代码确定如何设置“created_at”和“updated_at”?或者这是由数据库完成的?

更新:为了澄清,我想具体做一些事情:

  1. 我正在生成用于上传大量行/实体的表单。所以我需要知道表单中要包含哪些字段。是否总是Widget.accessible_atributes要手动设置字段?

  2. 我需要知道要自动包含哪些字段。如果我使用模型的新方法,created_atupdated_at, 和id会自动设置。我想在表中加载 1000 行我会执行类似 SQL 加载文件命令的操作,我想我需要设置 created_at 和 updated_at 但不是 id。我怎么知道要设置哪些字段。我正在寻找一些假设的方法,例如

    >> Widget.auto_columns
    # returns {:created_at => '04/12/2013 9:29pm', :updated_at => '04/12/2013'}
    

更新 2:试图看看脚手架是如何完成的,我看到在gems/railties/lib/rails/generators/erb/scaffold/templates/_form.html.erb中,代码使用了类似于属性数组的东西,它只包含显示在表格中。

<% attributes.each do |attribute| -%>
  <div class="field">
    <%%= f.label :<%= attribute.name %> %><br />
    <%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
  </div>
<% end -%>
  <div class="actions">
    <%%= f.submit %>
  </div>
<%% end %>

我认为属性数组是在支架_generator.rb 中使用 thor 的参数方法生成的。

4

1 回答 1

1

Rails 脚手架生成如何知道将哪些字段放入表单中。

生成脚手架时,您可以像这样生成它::

rails generate scaffold TableName attribute:type_of_attribute attribute2:type_of_attribute

您可以根据需要连接任意数量的属性。

此外,是否有代码确定如何设置“created_at”和“updated_at”?或者这是由数据库完成的?

时间戳 ( created_at, updated_at) 和id由 Rails 自动设置。

它们将始终添加到您的数据库中(除非您想手动删除迁移文件中的时间戳,但id将始终保留)。

您还可以在模型(表)中设置一些将自动生成的字段,但您必须为此编写代码。

关于可访问属性,虽然我不知道它的用途:

Photo.accessible_attributes.each { | attribute | puts attribute if attribute.length > 0 }

出于某种原因,它给了我第一个值“”,所以我就这样逃脱了它。还有更多关于属性和可访问性和计数列:

检索 Rails 模型列名称

如何从模型实例中发现可访问的属性名称?

于 2013-03-12T22:14:21.207 回答