Rails 5:从另一个控制器访问create方法

时间:2019-01-26 18:45:32

标签: ruby-on-rails

我目前正在开发一个客户仪表板,客户可以在那里看到新的报价,预订等等。

现在的问题是我有一个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 :(得分:1)

您需要使用循环变量而不是未定义的实例变量...

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