向 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 命令添加额外属性的主要内容,如果未能解决你的问题,请参考以下文章
核心数据 - 向 xcddatamodel 文件添加额外属性后应用程序崩溃
向 cpack 添加额外的命令 - NSIS 打包程序/安装程序