Для создания отношений «один-ко-многим» вам не нужен мощный механизм 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
Мы могут использовать строительные леса для создания обеих таблиц:
$ рельсов г эшафот Name пива на
$ рельсов имени проявителя г подмостей beer_id: Integer
Команда эшафота создает контроллеры и представление для каждой модели.
Мы должны изменить наши контроллеры и взгляды немного, чтобы получить выпадающее меню, чтобы выбрать пиво для каждого разработчика:
приложение/просмотров/Разработчики/_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
Снимки экрана



Примечания
Рельсы леса являются большими. Посмотрите на все файлы, которые он создает для вас:
$ 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.
Надеюсь, что это поможет. ~ Lex
Хороший материал, Джон, спасибо. –
Для целого ряда возможных вариантов: https://www.ruby-toolbox.com/categories/rails_admin_interfaces – givanse