向 rails 命令添加额外属性

Posted

技术标签:

【中文标题】向 rails 命令添加额外属性【英文标题】:adding extra attribute to a rails command 【发布时间】:2012-01-13 04:07:23 【问题描述】:

在尝试使用 -collection> rails generate scaffold Items name:string subcategory_id:integer users_id:integer 生成新的脚手架时,我错过了 'users_id:integer' 以及我可以在其上使用此属性而不是再次运行完整命令的方式。

谢谢

【问题讨论】:

【参考方案1】:

如果您还没有推送迁移,您可以编辑 db/migrate/201112*create_items.rb 并添加以下行:

add_column :items, :users_id, :integer

如果您已经推送了迁移,请创建另一个:

rails generate migration AddUsersIdToItems users_id:integer
rake db:migrate

然后你必须手动编辑脚手架代码:

vi app/views/items/_form.html.erb

复制 subcategory_id 的

并将其更改为 :users_id
<div class="field">
  <%= f.label :subcategory_id %><br />
  <%= f.number_field :subcategory_id %>
</div>
<div class="field">
  <%= f.label :users_id %><br />
  <%= f.number_field :users_id %>
</div>

或者,如果您正在运行 git,则可以运行“git checkout”。在运行第一个脚手架生成器后,它将撤消所有更改,然后您可以再次运行它。

【讨论】:

请问在文件中添加 :user_id, 会有什么效果 好像有问题,我的数据库表没有填充创建项目的用户的id :user_id div 用于选择您希望项目所属的用户的用户 ID。如果您希望它填充当前用户的 ID,请将 number_field 更改为隐藏字段并将其值设置为当前用户的 ID。 谢谢,但在完成所有操作后,即使添加了信息,表格也没有被填充【参考方案2】:

不是真的。

如果您还没有向现有脚手架添加任何新内容(并且只是担心必须删除/重新创建所有这些文件),那么您可以先运行 destroy 然后重新创建,例如:

rails destroy scaffold Items
rails generate scaffold Items name:string subcategory_id:integer users_id:integer

【讨论】:

如果您添加了任何内容,我会在下面建议我的答案。不过 Taryn 的建议会很有效。【参考方案3】:

这是一个非常古老的问题,但在我创建了自己的生成器之后,我突然想到了另一个答案。如果由于某种原因模型的属性发生了变化,无论是您通过迁移添加还是删除了属性,并且您希望在脚手架视图中反映这一点,只需使用您想要的所有属性以及 --跳过迁移选项。出现提示时选择覆盖您要覆盖的视图。

如果您忘记添加属性,请使用迁移添加它(rails g migration AddXXXToYYY field:type),然后像我上面解释的那样再次运行脚手架。

此解决方案适用于遇到此问题的任何 Rails 新用户。每当数据库发生变化时,手动更改视图并不有趣。

【讨论】:

以上是关于向 rails 命令添加额外属性的主要内容,如果未能解决你的问题,请参考以下文章

Rails 在补丁请求的参数列表中添加了一个额外的参数

核心数据 - 向 xcddatamodel 文件添加额外属性后应用程序崩溃

向 cpack 添加额外的命令 - NSIS 打包程序/安装程序

Rails has_many :通过连接模型中的额外属性查找

Rails在我的redis缓存中添加额外的行

如何向 symfony 2 表单添加一些额外的数据