Rails 5: доступ к методу создания с другого контроллера - PullRequest
0 голосов
/ 26 января 2019

В настоящее время я занимаюсь разработкой клиентской панели, где клиент может видеть новые предложения, бронирование и многое другое.

Проблема в том, что у меня есть reservations controller и dashboards controller

Я хочу отобразить кнопку оплаты в моем index.html.erb из папки dashboards. Например:

<% @services.each do |service| %>

<%= form_for([@service, @service.reservations.new]) do |f| %>
<div class="col-12 col-sm-4">
  <%= f.submit "Bestellen", class: "btn btn-primary", style: 'float:right' %>
</div>
<% end %>

<% end %>

Но тогда я получаю следующую ошибку:

ActionView::Template::Error (undefined method `reservations' for nil:NilClass):

Это мой контроллер бронирования:

  def create
    service = Service.find(params[:service_id])

if current_user == service.user
  flash[:alert] = "Du kannst nicht dein eigenes Angebot kaufen"
elsif current_user.stripe_id.blank?
  flash[:alert] = "Füge eine Zahlungsmehtode hinzu"
  return redirect_to payment_method_path
else
  @reservation = current_user.reservations.build(reservation_params)
  @reservation.service = service
  @reservation.price = service.price

  charge(service, @reservation)
end
redirect_to dashboard_path
  end

Контроллер панели инструментов

  def index
    @services = Service.all
  end

Поэтому я подумал, что я просто создам файл _form.html.erb в своей папке резервирования, а затем использую <%= render 'reservations/form %> в своих сводных панелях index, но это не сработало.

1 Ответ

0 голосов
/ 26 января 2019

Вам нужно использовать переменную цикла вместо неопределенной переменной экземпляра ...

<% @services.each do |service| %>
  <%= form_for [service, service.reservations.new] do |f| %>
    <div class="col-12 col-sm-4">
       <%= f.submit "Bestellen", class: "btn btn-primary", style: 'float:right' %>
    </div>
  <% end %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...