在Rails中撤消脚手架

时间:2009-06-08 04:33:42

标签: ruby-on-rails ruby scaffolding

有没有办法在Rails中“撤消”脚手架命令的效果?

24 个答案:

答案 0 :(得分:756)

首先,如果您已经运行了scaffold命令生成的迁移,则必须先执行回滚。

rake db:rollback

您可以使用以下方法创建脚手架:

rails generate scaffold MyFoo 

(或类似),可以使用

销毁/撤消
rails destroy scaffold MyFoo

这将删除generate创建的所有文件,但不会删除您手动进行的任何其他更改。

答案 1 :(得分:167)

Rishav Rastogi是对的,使用rails 3.0或更高版本:

rails generate scaffold ...
rails destroy scaffold ...

答案 2 :(得分:40)

你可以撤消你用

做的任何事情
rails generate xxx

通过

rails destroy xxx

例如,这会将生成器应用于迁移,脚手架,模型......等等。

答案 3 :(得分:13)

如果您只想查看生成器将创建的文件,您可以传递生成器--pretend或-p选项。

答案 4 :(得分:10)

最好的方法是:

destroy rake db:  rake db:rollback

对于脚手架:

rails destroy scaffold Name_of_script

答案 5 :(得分:8)

第一次,如果您已生成脚手架,则可以检查数据库迁移。 你必须销毁它们来清理你的数据库

rake db:rollback

然后

rails d scaffold

答案 6 :(得分:8)

rails d scaffold <scaffoldname>

此外,请确保撤消通过回滚或特定版本进行的迁移。

答案 7 :(得分:4)

Rails销毁名称

rake db:rollback

答案 8 :(得分:4)

生成脚手架:

rails generate scaffold xyz

要恢复脚手架:

rails destroy scaffold xyz

答案 9 :(得分:3)

用于在铁轨中生成脚手架 -

rails destroy scaffold MODEL_GOES_HERE

对于rails中的撤消脚手架 -

DEFINE TEMP-TABLE ttservice NO-UNDO
    FIELD ad-num AS CHARACTER  /* you have a "num" field defined as character?  that's misleading  */
    INDEX ttprimary AS UNIQUE ad-num .

for each vehicle no-lock:  /* perhaps ad-num is non-unique in the vehicle table? */

  find ttservice where ttservice.ad-num = vehicles.ad-num no-error.
  if available ttservice then
    do:
      message "oops!".  /* or whatever it is you want when a duplicate occurs... */
    end.
   else
    do:
      create ttservice.
      ASSIGN  ttservice.ad-num = vehicles.ad-num.
    end.

end. 

答案 10 :(得分:2)

你也需要在销毁脚手架后回滚迁移

rails destroy scaffold 'scaffoldname'
rake db:rollback

答案 11 :(得分:2)

因此,您应该按照以下步骤撤消rails中的scaffolding 4.运行Command如下:

  1. rails d scaffold FooBar
  2. rake db:rollback如果你在创建上述脚手架后__had_run _ rake db:migrate
  3. 那就是它!

    干杯!

答案 12 :(得分:2)

推荐回滚首先,输入您的终端。

rake db:rollback

添加破坏脚手架(&#39; d&#39;代表&#39;销毁&#39;)

rails d scaffold name_of_scaffold

享受您的代码。

答案 13 :(得分:1)

首先需要通过执行rake db:rollback来回滚迁移(如果有的话) 然后通过

摧毁脚手架
rails d scaffold foo

答案 14 :(得分:1)

使用此

rails d scaffold MODEL_NAME

rake db:rollback

答案 15 :(得分:1)

首先,您必须执行 rake db:rollback 以销毁表格 如果您已经运行 rake db:migrate ,那么您可以运行

rails d scaffold模型

答案 16 :(得分:1)

是的,// source: https://github.com/jserz/domPlus/blob/master/src/insertAfter()/insertAfter.js Node.prototype.insertAfter = Node.prototype.insertAfter || function (newNode, referenceNode) { function isNode(node) { return node instanceof Node; } if(arguments.length < 2){ throw(new TypeError("Failed to execute 'insertAfter' on 'Node': 2 arguments required, but only "+ arguments.length +" present.")); } if(isNode(newNode)){ if(referenceNode === null || referenceNode === undefined){ return this.insertBefore(newNode, referenceNode); } if(isNode(referenceNode)){ return this.insertBefore(newNode, referenceNode.nextSibling); } throw(new TypeError("Failed to execute 'insertAfter' on 'Node': parameter 2 is not of type 'Node'.")); } throw(new TypeError("Failed to execute 'insertAfter' on 'Node': parameter 1 is not of type 'Node'.")); 本身以及合并它的所有内容。

scaffold命令与destroy相反,将撤消一个命令。只需将名称与generate一样传递给它,然后从项目中删除它:

generate

答案 17 :(得分:1)

生成脚手架:

rails generate scaffold abc

要还原此脚手架:

rails destroy scaffold abc

如果您已为其运行迁移,则只需回滚

rake db:rollback STEP=1

答案 18 :(得分:1)

提供基于git的另一种解决方案

开始一个新项目

rails new project_name
cd project_name

初始化git

git init
git commit -m "initial commit"

创建一个脚手架

rails g scaffold MyScaffold
rake db:migrate

回滚脚手架

rake db:rollback
git reset --hard
git clean -f -d

答案 19 :(得分:1)

  

rails [option] scaffold scaffold_name

选项

g    generate
d    destroy

如果你这样做

rails g  scaffold myFoo

然后使用

将其反转
rails d scaffold MyFoo

答案 20 :(得分:0)

当我们生成脚手架时,将创建以下文件:

命令:rails generate scaffold Game

创建的文件:

>       invoke  active_record
>       create    db/migrate/20160905064128_create_games.rb
>       create    app/models/game.rb
>       invoke    test_unit
>       create      test/models/game_test.rb
>       create      test/fixtures/games.yml
>       invoke  resource_route
>        route    resources :games
>       invoke  inherited_resources_controller
>       create    app/controllers/games_controller.rb
>       invoke    erb
>       create      app/views/games
>       create      app/views/games/index.html.erb
>       create      app/views/games/edit.html.erb
>       create      app/views/games/show.html.erb
>       create      app/views/games/new.html.erb
>       create      app/views/games/_form.html.erb
>       invoke    test_unit
>       create      test/controllers/games_controller_test.rb
>       invoke    helper
>       create      app/helpers/games_helper.rb
>       invoke      test_unit
>       create        test/helpers/games_helper_test.rb
>       invoke    jbuilder
>       create      app/views/games/index.json.jbuilder
>       create      app/views/games/show.json.jbuilder
>       invoke  assets
>       invoke    coffee
>       create      app/assets/javascripts/games.js.coffee
>       invoke    scss
>       create      app/assets/stylesheets/games.css.scss
>       invoke  scss
>       create    app/assets/stylesheets/scaffolds.css.scss

如果我们在此之后运行迁移,那么我们必须首先回滚迁移,因为删除scaffold也将删除迁移文件,我们将无法恢复迁移。

我们已经进行了迁移:

rake db:rollback

在此之后我们可以安全地通过这个commad移除脚手架。

rails d scaffold Game

此命令将删除项目中脚手架创建的所有文件。

答案 21 :(得分:0)

任何时候运行rails g,您都可以通过运行rails d(销毁)来撤消它,以删除您生成的内容。如果您已经运行rake db:migrate,则需要在销毁之前运行rake db:rollback:)

答案 22 :(得分:0)

案例1:如果只运行此命令来生成脚手架 -

rake db:migrate

但到目前为止,您没有像

那样运行任何迁移命令
rails destroy scaffold User name:string address:text

那么你应该只需要运行这个命令,如 -

rails generate scaffold User name:string address:text

rake db:migrate 

案例2:如果您已经通过以下命令运行(脚手架和迁移),例如 -

rake db:rollback

rails destroy scaffold User name:string address:text

然后你应该运行第一个rollback migration命令然后像下面那样破坏scaffold -

var fdata       = new FormData();
var myform      = $('#prfform'); // specify the form element
var idata       = myform.serializeArray();
var document    = $('input[type="file"]')[0].files[0];
fdata.append('document[]', document);
$.each(idata,function(key,input){
    fdata.append(input.name,input.value);
});
$.ajax({
    url:"process.php",
    type: "POST",
    data: fdata,
    processData: false,
    contentType: false,
    beforeSend: function() {
        //something before send
    },
    success:function(data) {
        //something after response
    }
});

<form name="prfform" id="prfform" method="post" enctype="multipart/form-data">
    <!-- elements -->
</form>

所以以这种方式,我们可以撤消脚手架。此外,我们可以将 d 用于销售生成生成作为快捷方式。

答案 23 :(得分:0)

rails g scaffold MyFoo 

用于生成和

rails d scaffold MyFoo

删除