【发布时间】:2015-02-19 20:04:15
【问题描述】:
我正在用 Ruby on Rails 构建一个电影院应用程序,目前正在研究预订系统。我想要做的是从下拉菜单中选择一部电影,然后该电影的放映时间显示在下拉菜单中,用户可以选择放映时间,然后可用座位显示在下拉菜单。
我看过这个视频:https://www.youtube.com/watch?v=GYg6s-b1XGo 并看过很多其他网站,但我想做的事情有点复杂。
好的,我的models/bookings.rb:
class Booking < ActiveRecord::Base
belongs_to :user
belongs_to :showing
belongs_to :seat
end
models/showing.rb:
class Showing < ActiveRecord::Base
belongs_to :film
has_many :bookings
belongs_to :screen
def showing_times
"#{show_date.strftime("%e %b %Y")} @ #{show_time.strftime("%H:%M")}"
end
end
models/seats.rb:
class Seat < ActiveRecord::Base
belongs_to :screen
has_many :bookings
def seats_available
"#{row_letter}#{row_number}"
end
end
这就是复杂的地方,我的观点/bookings/_form.html.erb:
<%= form_for @booking do |f| %>
<%= f.hidden_field :user_id %>
<%= image_tag "thor_hammer.jpg",:size => "900x250" %>
<td width="300px">
<br><%= f.label :film_id, 'Film:' %>
<br><%= f.collection_select :film_id, Film.all, :id,:title_info %>
<br><%= f.label :showing_id, 'Showing:' %>
<br><%= f.collection_select :showing_id, Showing.all, :id,:showing_times %>
<br><%= f.label :seat_id, 'Seat ID:' %>
<br><%= f.collection_select :seat_id, Seat.all, :id,:seats_available %><br>
</td>
<td width="300px">
<div class="actions">
<%= f.submit %>
</div>
<br>
<%= render "/error_messages", :message_header => "Cannot save: ", :target => @booking %>
</td>
<% end %>
这是变得复杂的地方,因为<%= f.collection_select :film_id, Film.all, :id,:title_info %> 行会导致错误:
NoMethodError in Bookings#new
undefined method `film_id' for #<Booking:0x584e6b0>
因为预订数据表不存储电影,它存储放映时间,并且有与之关联的电影,对于座位也是如此:用户需要能够选择放映才能选择座位但showings表与screens表相关联,与seats相关联。
为了更清楚,这里是架构:
create_table "bookings", force: :cascade do |t|
t.integer "user_id"
t.integer "showing_id"
t.integer "seat_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "films", force: :cascade do |t|
t.string "title"
t.string "synopsis"
t.string "director"
t.string "cast1"
t.string "cast2"
t.string "cast3"
t.date "release_date"
t.string "warnings"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "image_url"
t.string "certificate_id"
t.integer "category_id"
t.integer "hours"
t.integer "minutes"
t.string "video_url"
end
create_table "screens", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "seats", force: :cascade do |t|
t.string "row_letter"
t.integer "row_number"
t.integer "screen_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "showings", force: :cascade do |t|
t.date "show_date"
t.time "show_time"
t.integer "film_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "screen_id"
end
有人有什么建议吗?
【问题讨论】:
标签: ruby-on-rails ruby drop-down-menu