不确定我是否在读书 是的,但 Scaffold 似乎不会完全实现一对多关系。例如,如果我创建 messages 用脚手架然后我想要 comments 关于那些 messages (一 message -> 很多 comments),我必须经历并改变一切。例如,我必须在 commentnew 看法

<% form_for(@comment) do |f| %>

对此

<% form_for([@message, @comment]) do |f| %>

然后更改操作来设置 @message 变...除其他事项外。

目前这不能用 Scaffold 自动完成,对吗?

有帮助吗?

解决方案

这是事实,但是,这还不是故事的结局。Scaffold 至少有两种替代方案,它们都工作得很好,并且自动获取类之间的关系(基于 ActiveRecord 关系指示器,如 has_many)。这些替代方案之一是 精简 另一个是 活动脚手架.

它们主要有助于输入系统所需的数据,而不是用户输入的数据。例如,我将它们用于表上的管理任务,当其中一个脚手架替代方案可以很好地完成很少使用的功能时,为 CRUD 构建完整的 UI 是没有意义的。不过,您不会想使用它们来评论消息。

其他提示

是。脚手架工程的模型和相关的控制器。它不照顾或关系的工作。

支架的主要目标是获得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以外的任何其他(这是一个支架是什么/做),你需要改变所产生的脚手架代码,或推出自己。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top