向Rails模型添加新字段

Bic*_*ick 26 ruby-on-rails

我已经创建了一个scafold使用

rails generate scaffold myOdb2 columna:integer, columnB:string
Run Code Online (Sandbox Code Playgroud)

现在我想补充一下columnc:string.我该怎么办?

顺便说一句:问题很普遍,但是可以通过Rubymine更快地完成吗?

Mat*_*tzi 68

您必须生成迁移:

rails g migration add_columnc_to_myodb2s columnc:string
Run Code Online (Sandbox Code Playgroud)

它应该包含一行向表中添加列.

add_column :myodb2s, :columnc, :string
Run Code Online (Sandbox Code Playgroud)

这会将列添加到您的db表中,当然也会添加到您的模型中,但不会添加到任何视图中.您需要手动添加它.据我所知.


Nat*_*ate 33

  • 如果您刚刚生成它并意识到您的错误,您可以使用:

    rails destroy scaffold myOdb2

    然后重新生成脚手架:

    rails generate scaffold myOdb2 columna:integer, columnB:string, columnc:string

  • 如果您对希望保留的脚手架创建的模型进行了一些更改,但您不介意破坏控制器和视图:

    rails destroy scaffold_controller myOdb2

    然后创建一个迁移来添加列:

    rails generate migration add_columnc_to_myodb2s columnc:string

    然后重新生成控制器和视图:

    rails generate scaffold_controller myOdb2 columna:integer, columnB:string, columnc:string

  • 如果您对控制器或视图进行了更改,则只需运行迁移即可更新数据库和模型,然后手动将新列添加到每个视图中.


zee*_*zee 5

没有人提到更新强参数:

因此,假设我有一个现有的脚手架,myapp而我想向该脚手架添加更多字段。要完成的三件事。

要添加的字段是:

=>

1) rails g migration add_term_count_and_current_record_count_and_previous_record_count_to_myapp term_count:integer , current_record_count:integer , previous_record_count:integer

=>

2) Update views, example updating _form.html.rb
Run Code Online (Sandbox Code Playgroud)

我需要添加:

<div class="field">
    <%= f.label :current_record_count %><br>
    <%= f.number_field :current_record_count%>
  </div>

 <div class="field">
    <%= f.label :current_record_count %><br>
    <%= f.number_field :previouse_record_count%>
  </div>

  <div class="field">
    <%= f.label :term_count  %><br>
    <%= f.number_field :terminations_count %>
  </div>
Run Code Online (Sandbox Code Playgroud)

=>

3) Update Controller : 
Run Code Online (Sandbox Code Playgroud)

新版本的rails具有所谓的“强参数”,可以防止黑客传递任意列字段值。长话短说,用新的字段名称更新方法,否则您将看不到新的字段..它们不会传递给任何地方...不可信的值; o)

 # Never trust parameters from the scary internet, only allow the white list through.

def vendor_file_params
    params.require(:vendor_file).permit(:name, :run_date,  :term_count ,
    :current_record_count , :previous_record_count ,:comments)   
end
end
Run Code Online (Sandbox Code Playgroud)