У меня есть две отдельные модели / контроллеры. Один называется "Торговцы", другой называется "CompanyLocations". Мне нужно иметь возможность добавить нового продавца и хотя бы одно местоположение в той же форме. С кнопкой, которая позволяет мне добавить больше мест, если это необходимо.
Используя образцы данных, я заполнил первые 5 из 30 торговцев данными о местоположении. Теперь у вас хорошо работает представление «Показать торговца», оно отображает местоположение продавца и компании под ним.
Моя проблема на новых страницах редактирования / редактирования. Кажется, я не могу поместить другое местоположение в базу данных, связанную с идентификатором продавца.
Ошибка, которую я получаю: «неопределенный метод` company_locations 'для nil: NilClass "после того, как я пытаюсь добавить местоположение компании на странице редактирования продавца.
Также я получаю сообщение об ошибке при попытке добавить нового продавца. И кнопка добавления появляется дважды, один раз для нового продавца и один раз для местоположения добавления.
В моих моделях у меня есть
merchant.rb
has_many :company_locations, :dependent => :destroy
company_location.rb
belongs_to :merchant
Вот мои файлы:
Контроллеры / merchant_controller.rb
def new
@merchant = Merchant.new
@company_location = @merchant.company_locations.new
end
def edit
@merchant = Merchant.find(params[:id])
@company_location = @merchant.company_locations.new
end
Контроллеры / company_locations_controller.rb
def create
@company_location = @merchant.company_locations.build(params[:company_location])
if @company_location.save
redirect_to 'merchants/show', :flash => { :success => "Company Location Added" }
else
redirect_to 'merchants/index', :flash => { :error => "Location not saved" }
end
end
def update
end
просмотры / продавцы / new.html.erb
<h1>New merchant</h1>
<%= render 'form' %>
<%= render 'company_locations/form' %>
<%= link_to 'Cancel', merchants_path %>
вид / продавцов / _form.html
<%= form_for(@merchant) do |f| %>
<% if @merchant.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@merchant.errors.count, "error") %> prohibited this merchant from being saved:</h2>
<ul>
<% @merchant.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :company_name %><br />
<%= f.text_field :company_name %>
</div>
<div class="field">
<%= f.label :fanpage_url %><br />
<%= f.text_field :fanpage_url %>
</div>
<div class="field">
<%= f.label :twitter_id %><br />
<%= f.text_field :twitter_id %>
</div>
<div class="field">
<%= f.label :website_url %><br />
<%= f.text_field :website_url %>
</div>
<div class="field">
<%= f.label :contact_email %><br />
<%= f.text_field :contact_email %>
</div>
<div class="field">
<%= f.label :active %><br />
<%= f.check_box :active %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Вид / company_locations / _form.html.erb
<%= form_for @company_location do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<div class="field">
<%= f.label :address1 %><br />
<%= f.text_field :address1 %>
</div>
<div class="field">
<%= f.label :address2 %><br />
<%= f.text_field :address2 %>
</div>
<div class="field">
<%= f.label :city %><br />
<%= f.text_field :city %>
</div>
<div class="field">
<%= f.label :state %><br />
<%= f.text_field :state %>
</div>
<div class="field">
<%= f.label :zip %><br />
<%= f.text_field :zip %>
</div>
<div class="field">
<%= f.label :phone %><br />
<%= f.text_field :phone %>
</div>
<div class="field">
<%= f.label :fax %><br />
<%= f.text_field :fax %>
</div>
<div class="actions">
<%= f.submit "Add Location" %>
</div>
<% end %>