导轨:脚手架自动建立一对多关系
-
20-08-2019 - |
题
不确定我是否在读书 这 是的,但 Scaffold 似乎不会完全实现一对多关系。例如,如果我创建 messages
用脚手架然后我想要 comments
关于那些 messages
(一 message
-> 很多 comments
),我必须经历并改变一切。例如,我必须在 comment
的 new
看法
<% form_for(@comment) do |f| %>
对此
<% form_for([@message, @comment]) do |f| %>
然后更改操作来设置 @message
变...除其他事项外。
目前这不能用 Scaffold 自动完成,对吗?
其他提示
是。脚手架工程的模型和相关的控制器。它不照顾或关系的工作。
支架的主要目标是获得CRUD使用控制器和相关视图正在进行的模型。就这样。像关系的任何其它要求都必须手工编码。
请注意,有像流浪汉项目为Rails这让你保持在模型本身内的田地,协会。你不能脚手架关联,但它是非常接近。
您最终具有内置在背后的应用程序有更多的这种糖支付。相反,滚动你自己的,你平时减去你从预建行为的大型银行所需要的。
您不需要重轨管理框架来获取一个一对多的关系的工作。
您可以使用脚手架来获得大部分的存在方式。
在控制器和视图_form多一点工作,将让你的有休息的方式。
下面是如何...
Story: Select a beer for a developer
In order to select a beer for a developer
As an admin
I want a mainly scaffolded interface to select that beer
Scenario 1: Select beer for new developer
Given I have clicked the <new> button and entered the developer's name
When I click the beer dropdown
Then I should be presented with a list of beers to choose from
And that beer will be saved when I click <ok>
Scenario 2: Select a different beer for existing developer
Given I have clicked the <edit> button on the index page for a particular developer
When I click the beer dropdown
Then I should be presented with a list of beers to choose from
And that beer will be saved when I click <ok>
假设我们有一个的啤酒强>表:
create_table "beers", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
和一个的开发强>表,其具有外键(beer_id)引用啤酒表:
create_table "developers", force: true do |t|
t.string "name"
t.integer "beer_id"
t.datetime "created_at"
t.datetime "updated_at"
end
我们可以用脚手架创建两个表:
$导轨克支架啤酒名称
$导轨克支架开发者名称beer_id:整数
的支架命令创建每个模型的控制器和视图。
我们将需要修改我们的控制器和视图一点点地得到下拉菜单中选择每个开发商啤酒:
应用/视图/开发者/ _form.html.erb 强>
替换所生成的text_field和标签,用于与以下beer_id:
<div class="field">
<%= f.label :beer_id %><br />
<%= collection_select(:developer, :beer_id, @beers, :id, :name, {:prompt => false}) %>
</div>
应用/控制器/ developer_controller.rb 强>
编辑控制器的新和编辑的方法:
# GET /developers/new
def new
@developer = Developer.new
@beers = Beer.all
respond_to do |format|
format.html # new.html.erb
end
end
# GET /developers/1/edit
def edit
@beers = Beer.all
respond_to do |format|
format.html # new.html.erb
end
end
<强>屏幕快照强>
备注强>
Rails的脚手架是很大的。看看它为你创建的所有文件:
$ be rails g scaffold beer name
invoke active_record
create db/migrate/20140912144218_create_beers.rb
create app/models/beer.rb
invoke rspec
create spec/models/beer_spec.rb
invoke factory_girl
create spec/factories/beers.rb
invoke resource_route
route resources :beers
invoke scaffold_controller
create app/controllers/beers_controller.rb
invoke erb
create app/views/beers
create app/views/beers/index.html.erb
create app/views/beers/edit.html.erb
create app/views/beers/show.html.erb
create app/views/beers/new.html.erb
create app/views/beers/_form.html.erb
invoke rspec
create spec/controllers/beers_controller_spec.rb
create spec/views/beers/edit.html.erb_spec.rb
create spec/views/beers/index.html.erb_spec.rb
create spec/views/beers/new.html.erb_spec.rb
create spec/views/beers/show.html.erb_spec.rb
create spec/routing/beers_routing_spec.rb
invoke rspec
create spec/requests/beers_spec.rb
invoke helper
create app/helpers/beers_helper.rb
invoke rspec
create spec/helpers/beers_helper_spec.rb
invoke jbuilder
create app/views/beers/index.json.jbuilder
create app/views/beers/show.json.jbuilder
invoke assets
invoke coffee
create app/assets/javascripts/beers.js.coffee
invoke scss
create app/assets/stylesheets/beers.css.scss
invoke scss
create app/assets/stylesheets/scaffolds.css.scss
所有你需要做的就是知道哪些文件,当你需要的不仅仅是基本的CRUD操作更多修改。
希望有所帮助。 〜莱克斯
支架是支架。当你想在一个表比CRUD以外的任何其他(这是一个支架是什么/做),你需要改变所产生的脚手架代码,或推出自己。