如何传递数据变量以仅显示相关数据?
How do I pass over a data variable to show only associated data?
这可能是一个相当基本的问题,但我对 Rails 上的 Ruby 还很陌生。
在我的 Ruby on Rails 应用程序中,我有一个影院系统。我想做什么:
在 films/show 页面上,用户可以选择 'Book' 电影座位,当他们这样做时,我希望他们转到 showings/index 页面,在那里他们可以select 那部电影的放映。我遇到的问题是让 showings/index 页面只显示该电影的放映,因为目前它只是列出数据库中的所有放映。
这是 films/show 列出放映的页面,我正在尝试传递电影数据:
<% 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]
有人有什么想法吗?
在 ruby 中,variable
和 @variable
是两个不同的东西,因此在您的 films/show
页面中,您要遍历每个 @film.showings
并且有一个本地 showing
变量(您 do 实际上在循环的第一行中使用)但是在您的 link_to 'Book'
中您使用 @showing
要么有没有值,或值错误(如果您将其设置为控制器中的显示之一)。
修复方法是将 @showing
替换为 showing
局部变量 link_to
首先我们配置路由
resources :films do
resources :showings
end
然后我们配置控制器
class ShowingController < ApplicationController
def index
@showings = Showing.where(film_id: params[:film_id])
end
end
无需更新视图,应该可以正常工作
确保检查您所有的旧放映路线,您可能需要更新它们,如果您发现修复所有这些路线很麻烦,我们可以在 /showings
下创建所有资源操作并且仅将 :index
移到 films
下
这可能是一个相当基本的问题,但我对 Rails 上的 Ruby 还很陌生。
在我的 Ruby on Rails 应用程序中,我有一个影院系统。我想做什么:
在 films/show 页面上,用户可以选择 'Book' 电影座位,当他们这样做时,我希望他们转到 showings/index 页面,在那里他们可以select 那部电影的放映。我遇到的问题是让 showings/index 页面只显示该电影的放映,因为目前它只是列出数据库中的所有放映。
这是 films/show 列出放映的页面,我正在尝试传递电影数据:
<% 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]
有人有什么想法吗?
在 ruby 中,variable
和 @variable
是两个不同的东西,因此在您的 films/show
页面中,您要遍历每个 @film.showings
并且有一个本地 showing
变量(您 do 实际上在循环的第一行中使用)但是在您的 link_to 'Book'
中您使用 @showing
要么有没有值,或值错误(如果您将其设置为控制器中的显示之一)。
修复方法是将 @showing
替换为 showing
局部变量 link_to
首先我们配置路由
resources :films do
resources :showings
end
然后我们配置控制器
class ShowingController < ApplicationController
def index
@showings = Showing.where(film_id: params[:film_id])
end
end
无需更新视图,应该可以正常工作
确保检查您所有的旧放映路线,您可能需要更新它们,如果您发现修复所有这些路线很麻烦,我们可以在 /showings
下创建所有资源操作并且仅将 :index
移到 films