更新日: ありがとうございました。私はこの問題をTicketsコントローラの "order"アクションが発砲していないという事実に戻って追跡することができました。これはエラーを説明し、あなたが指摘しているように、@eventは基本的にnilです。次のようにActionView :: Template :: Error(未定義メソッド `event_title 'for nil:NilClass)
私のルートは以下のとおりです。
Rails.application.routes.draw do
get 'tickets', to: 'tickets#index'
post 'order', to: 'tickets#order'
post 'confirmation', to: 'tickets#confirmation'
私は、オブジェクトを変更していないよので、代わりにform_tag使用するIndex.html.erbページを更新し、単に順番にパラメータを送信したいましたアクション。
<%= form_tag order_path do %>
<div class="row">
<div class="large-6 columns">Choose Your Tickets:
<%= collection_select(:tickets, :ticket_id, Tickettype.where(event_id: event.id) , :id, :ticketname) %>
</div>
<input type="hidden" value="<%= event.id %>" name="event_id" />
</div>
</div>
<div class="row">
<div class="large-6 columns">Quantity:
<%= select_tag(:ticketqty, options_for_select(["-----Select Quantity-----", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]))%>
</div>
<div class="large-6 columns">
<%= submit_tag "Purchase tickets", class: "alert button" %>
</div>
</div>
<% end %>
ご意見をいただければ幸いです!
私は数時間前から壁に頭を打っていて、何が間違っているのか分かりません。
非常に単純に、私はインデックスページにparamsを "order"ページに渡すフォームを持っています。 <%= params.inspect%>を使用すると、「注文」ページにすべてが表示されます。私の問題は、コントローラコードでそれらを使用しようとすると発生します。使用
ActionView::Template::Error (undefined method `event_title' for nil:NilClass):
10: <div class="large-12 columns">
11: <%= params.inspect %>
12:
13: <%= @event.event_title %>
14: <%= params[:ticketqty] %>
15:
16: </div>
app/views/tickets/order.html.erb:13:in `_app_views_tickets_order_html_erb___998894167849228569_70303636962040'
:
def order
@event = Event.find(params[:event_id])
@tickets = Tickettype.find(params[:tickets][:ticket_id])
end
私はその後、私は
<%= @event.event_title %>
を使用して、私の「注文」ページにアップしているよ、それは次のエラーを投げ続けるイベントを参照しようrails console、イベントオブジェクトを作成してタイトルを表示できることを確認しました
@event = Event.find(16)
@event.event_title
これは、予想されるタイトルを印刷します。言うまでもなく、私はコンソールからオブジェクトを作成することができない理由が残っていますが、コントローラ内では機能しないようです。
ご協力いただければ幸いです。ここで
は私のチケットコントローラーの完全なコードです:
class TicketsController < ApplicationController
def index
# return next 4 upcoming events
@events = Event.order(event_datetime: :desc).limit(4)
end
def order
@event = Event.find(params[:event_id])
@tickets = Tickettype.find(params[:tickets][:ticket_id])
end
end
そしてここでは、私のルートファイルです:
Rails.application.routes.draw do
get 'tickets', to: 'tickets#index'
post 'order', to: 'tickets#order'
post 'confirmation', to: 'tickets#confirmation'
これは、パラメーターを渡しているインデックスページからコードですorder.html.erbファイル。 INDEX.HTML.ERB
<%= form_for :tickets, :url => { :controller => "tickets", :action => "order" }, html: {method: "post"} do |f| %>
<div class="row">
<div class="large-6 columns">Choose Your Tickets:
<%= f.collection_select(:ticket_id, Tickettype.where(event_id: event.id) , :id, :ticketname) %>
</div>
<input type="hidden" value="<%= event.id %>" name="event_id" />
</div>
</div>
<div class="row">
<div class="large-6 columns">Quantity:
<%= select_tag(:ticketqty, options_for_select(["-----Select Quantity-----", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]))%>
</div>
<div class="large-6 columns">
<%= f.submit "Purchase tickets", class: "alert button" %>
</div>
</div>
<% end %>
そして、これがORDER.HTML.ERB
以下<div class="row" style="background-color: #FFFFFF">
<div class="large-12 columns">
<P></P>
<h4 class="page_header">Order Details</h4>
<span class="areatitle-line"></span>
</div>
</div>
<div class="row" style="background-color: #FFFFFF">
<div class="large-12 columns">
<%= params.inspect %>
<%= @event.event_title %>
</div>
</div>
ですが、私はOrder.html.erbページに投稿された参照パラメータの出力例です。
{"utf8"=>"✓", "authenticity_token"=>"nLEehsQWzrkjXmtX0qEFpkHXGkEMGX3NV6tLjb2HRFAKwwdGtxM028dpclMjukmGIuD4XJk+OTAhw4L9norZPg==", "tickets"=>{"ticket_id"=>"4"}, "event_id"=>"17", "ticketqty"=>"2", "commit"=>"Purchase tickets", "controller"=>"tickets", "action"=>"order"}
tickets_controllerの全コンテンツとルートを貼り付けることはできますか? – oreoluwa
この情報を掲載するように投稿を更新しました。前もって感謝します。 –
チケットコントローラのインデックスアクションで@eventを定義するとどうなりますか? – Ren