这可能是一个相当基本的问题,但我对Ruby on Rails相当新。
在我的Ruby on Rails应用程序中,我有一个影院系统。我想做什么:
在电影/节目页面上,用户可以选择“预订”电影的座位,当他们这样做时,我希望他们进入放映/索引页面,在那里他们可以选择该电影的放映。我遇到的问题是让showings / index页面只显示该电影的放映,因为目前它只列出了数据库中的所有放映。
这是电影/节目页面,其中列出了放映,我正试图传递电影数据:
<% if not @film.showings.blank? %>
<% @film.showings.each do |showing| %>
<%= showing.show_date.strftime("%A %e %B %Y") %>@ <%= showing.show_time.strftime("%H:%M") %>
<% if logged_in? %>
<%= link_to 'Book', showings_path(@showing) %>
<% end %></br>
<% end %>
<% end %>
和showings / index页面:
<% @showings.each do |showing| %>
<tr id='sizeable'>
<td><%= showing.show_date %></td>
<td><%= showing.show_time %></td>
<td><% if not showing.film.blank? %><%= showing.film.title %><% end %></td>
<td style="padding-right:65px">
<%= link_to 'Delete', showing_path(showing), method: :delete, data: { confirm: 'Are you sure?' } %>
</td>
</tr>
<% end %>
我目前的路线:
Rails.application.routes.draw do
resources :showings
get 'sessions/new'
get 'sessions/create'
get 'sessions/destroy'
controller :sessions do
get 'login' => :new
post 'login' => :create
get 'logout' => :destroy
end
resources :users
get 'films/index'
get 'categories/index'
get 'certificates/index'
resources :films
resources :categories
resources :certificates
resources :showings
resources :bookings
resources :seats
resources :screens
root 'films#index'
post 'films/search', to: 'films#search'
post 'films/display_products_by_genre', :to => 'films#display_products_by_genre'
get 'films/display_products_by_genre', :to => 'films#display_products_by_genre'
post 'seats/display_seats_by_screen', :to => 'seats#display_seats_by_screen'
get 'seats/display_seats_by_screen', :to => 'seats#display_seats_by_screen'
post 'screens/display_screens_by_showing', :to => 'screens#display_screens_by_showing'
get 'screens/display_screens_by_showing', :to => 'screens#display_screens_by_showing'
post 'films/multi_find', :to => 'films#multi_find'
get 'films/multi_find', :to => 'films#multi_find'
post 'seats/multi_find', :to => 'seats#multi_find'
get 'seats/multi_find', :to => 'seats#multi_find'
post 'screens/multi_find', :to => 'screens#multi_find'
get 'screens/multi_find', :to => 'screens#multi_find'
match '*a', to: 'errors#routing', via: [:get, :post]
有人有什么想法吗?
答案 0 :(得分:1)
首先我们配置路由
resources :films do
resources :showings
end
然后我们配置控制器
class ShowingController < ApplicationController
def index
@showings = Showing.where(film_id: params[:film_id])
end
end
无需更新视图,它应该可以正常工作
确保检查所有旧的放映路线,您可能需要更新它们,如果您发现修复所有这些路线很麻烦,我们可以在/showings
下创建所有资源操作只移动:index
films
答案 1 :(得分:0)
在ruby中,variable
和@variable
是两个不同的东西,所以在films/show
页面中,您在每个@film.showings
上进行迭代,并且有一个本地showing
变量(你做实际上在你的循环的第一行使用了)但在你的link_to 'Book'
中使用了@showing
,它没有任何值,或者具有错误的值(如果你把它设置为控制器中的一个放映。)
修复方法是将@showing
替换为showing
link_to
局部变量