Я уже создал scafold с помощью
rails generate scaffold myOdb2 columna:integer, columnB:string
Теперь я хочу добавить columnc:string
. Что мне делать?
Кстати: вопрос общий, но можно ли это сделать быстрее через Rubymine?
Я уже создал scafold с помощью
rails generate scaffold myOdb2 columna:integer, columnB:string
Теперь я хочу добавить columnc:string
. Что мне делать?
Кстати: вопрос общий, но можно ли это сделать быстрее через Rubymine?
Если вы только что создали его и осознали свою ошибку, вы можете использовать:
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
Если вы внесли изменения в контроллер или представления, вам нужно просто выполнить миграцию для обновления базы данных и модели, а затем вручную добавить новый столбец в каждое из своих представлений.
Вы должны создать миграцию:
rails g migration add_columnc_to_myodb2s columnc:string
Он должен содержать строку добавления столбца в таблицу.
add_column :myodb2s, :columnc, :string
Это добавляет столбец в таблицу yourdb и, конечно, к вашей модели, но не в любом представлении. Вам нужно добавить его вручную. Насколько я знаю.
никто не упоминал обновление сильных параметров:
Итак, скажем, у меня есть существующий эшафот под названием 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
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