Подтвердить что ты не робот

Добавление нового поля в модель Rails

Я уже создал scafold с помощью

rails generate scaffold myOdb2 columna:integer, columnB:string

Теперь я хочу добавить columnc:string. Что мне делать?

Кстати: вопрос общий, но можно ли это сделать быстрее через Rubymine?

4b9b3361

Ответ 1

  • Если вы только что создали его и осознали свою ошибку, вы можете использовать:

    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

  • Если вы внесли изменения в контроллер или представления, вам нужно просто выполнить миграцию для обновления базы данных и модели, а затем вручную добавить новый столбец в каждое из своих представлений.

Ответ 2

Вы должны создать миграцию:

rails g migration add_columnc_to_myodb2s columnc:string

Он должен содержать строку добавления столбца в таблицу.

add_column :myodb2s, :columnc, :string

Это добавляет столбец в таблицу yourdb и, конечно, к вашей модели, но не в любом представлении. Вам нужно добавить его вручную. Насколько я знаю.

Ответ 3

никто не упоминал обновление сильных параметров:

Итак, скажем, у меня есть существующий эшафот под названием 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

Мне нужно было добавить:

<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>

= >

3) Update Controller : 

Новые версии рельсов имеют так называемый сильный параметр, чтобы хакеры не могли передавать произвольные значения полей столбца. Короче говоря, обновите метод с новыми именами полей, иначе вы не увидите новые поля.. они не будут переданы нигде... ненадежные значения; 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

Ответ 4

Scaffolding, быстро и просто, каждый раз генерирует модель данных и веб-интерфейс. Однако рельсы generate scaffold - это всего лишь способ начать работу с вашей моделью, и это помогает только в начале.

Обычно вам необходимо расширить модель данных. Эта задача упрощается с помощью rails generate migration и rake db:migration. Обратите внимание, что вы можете использовать rake с bundle exec, чтобы гарантировать использование версии рейка в вашем Gemfile.

Затем вам, вероятно, захочется напрямую обновлять (возможно, создавать новые) контроллеры и представления в соответствии с требованиями вашего веб-приложения.

aka MVC

Например, в новой модели подкладок вы можете обновить индекс и показать представления (см. папку app/views) и контроллер myOdb2 (см. папку app/controllers)

Не забудьте прочитать о митратонах http://guides.rubyonrails.org/migrations.html