Per*_*ich 23 ruby scaffolding ruby-on-rails-3
有没有办法为Rails模型生成一个具有has_and_belongs_to_many或has_many:through关系的脚手架?如果没有,是否有一个发展原因,为什么没有包括这个功能的一些基本形式?Rails要求开发人员生成并编辑"自定义""连接表迁移".对细节的必要关注是一种提醒Rails开发人员注意某些重要事实的方法,还是仅仅是Rails如何"正在进行中?"的一个例子.
快速Stackoverflow搜索:
"has_and_belongs_to_many" yields 821 questions
"has_many :through" yields 933 questions
Run Code Online (Sandbox Code Playgroud)
......其中许多都以"我如何......"开头.所以看起来这个话题对于SO用户来说并不是微不足道的.我猜我想知道它为什么没有引起注意.事情比看起来更复杂吗?Rails的功能集似乎非常广泛.我一直在想为什么省略了与连接表关联的脚手架.
请把你的答案集中在上面的断言或"包括声明",脚手架必须包括......"或"轨道生成脚本需要......"
谢谢!
我喜欢你的问题,我自己想知道为什么这不包含在Rails中(并且我怀疑不能作为Gem使用).以下是可能成为问题的一些原因.我会用典型的例子解释一下assemblies和parts.
脚手架通过使用生成器来创建文件.如果迁移到较新版本,有时可以通过执行以下步骤来更新现有文件:
这意味着没有添加到文件或更改文件的概念. 编辑:事实并非如此,有机制可以添加到文件甚至更改文件.
如果你看一下例如has_many :through(应该类似has_and_belongs_to_many),你必须做以下事情:
添加创建连接表的迁移.
==>脚手架应该可以做到: rails g scaffold_hmt Assembly Part
为该连接模型添加模型.
==>以前的脚手架应该可以搭建脚手架.
更改现有模型以包含以下行:
assembly.rb: has_many 'assemblies_parts'; has_many :parts, :through => 'assemblies_parts'
part.rb: has_many 'assemblies_parts'; has_many :assemblies, :through => 'assemblies_parts'
==>所以没有脚手架可能
has_many视图中的问题相同.总而言之,脚手架值得一试(见下段).到RailsGuides 创建和自定义Rails生成器和模板似乎也合情合理,至少.并且生成部分文件的解决方案,相应地命名它们并帮助控制台上的脚手架输出以手动完成剩下的工作可能值得一试.
我昨天试过提出一个部分解决方案,你可以在GitHub上看一下.它的工作方式如下:
scaffold_hmt(代表has_many :through)的内容复制到rails应用程序目录lib/generators.rails g scaffold_hmt Assembly Part.它无法更改文件:
assembly.rbpart.rb原因在于找到合适的地方并非易事.作为一种解决方法,它会打印出应该插入到文件中的内容.
c:\apps\ruby\rails3\minds>rails generate scaffold_hmt Assembly Part
create db/migrate/20111011135944_create_assemblies_parts.rb
create app/models/assemblies_part.rb
Try to insert into file: app/models/assembly.rb the following statements:
has_many :assemblies_parts
has_many :parts, :through => :assemblies_parts
insert app/models/assembly.rb
Try to insert into file: app/models/part.rb the following statements:
has_many :assemblies_parts
has_many :assemblies, :through => :assemblies_parts
insert app/models/part.rb
Run Code Online (Sandbox Code Playgroud)试一试,看看这对你有帮助.
| 归档时间: |
|
| 查看次数: |
6825 次 |
| 最近记录: |