在我的预订表中,我有一个房间(文本)字段来存储哈希值,例如(1 => 3),其中1是roomtype,3对应于同一代理预订的房间数量。
我的预订模式
serialize reserved_rooms, Hash
这是我的嵌套资源
resources :hotels do
resources :roomtypes, :reservations
end
RoomType存储属于酒店型号的单一房型。虽然我可以在我的预订表单中招募房型,但我不知道如何通过表单创建动态哈希来创建/更新此哈希。 我有这个,但我正在寻找一种方法来创建一个动态哈希“键,值”集。这意味着,如果酒店模型有两个RoomType,我的哈希将是{12 => 5,15 => 1}(键对应于roomtype_ids,而值是金额}
<%= f.fields_for ([:roomtypes, @hotel]) do |ff| %>
<% @hotel.roomtypes.each do |roomtype| %>
<%= ff.label roomtype.name %>
<%= f.select :reserved_rooms, ((0..50).map {|i| [i,i] }), :include_blank => "" %>
<% end %>
<% end %>
我想要的是this website在可用性部分(房间数)中的内容:
规格:rails 4.1,ruby 2.1
注意:如果您认为此方法存在设计问题(将reserved_room存储在序列化字段中),我可以通过创建另一个表来存储数据,从而遵循另一条路径。
答案 0 :(得分:0)
可能需要调整,但我使用类似的代码和复选框,它工作正常!
<% @hotel.roomtypes.each do |roomtype| %>
<%= f.label roomtype.name %>
<%= f.select :"reserved_rooms[roomtype.id]", ((0..50).map {|i| [i,i] }), :include_blank => "" %>
<% end %>
答案 1 :(得分:0)
这变得非常混乱,我可能会考虑使用你提到的单独模型。我只想做:
class Hotel < ActiveRecord::Base
has_many :room_types
has_many :rooms, :through => :room_types
end
class RoomType < ActiveRecord::Base
has_many :rooms
end
class Room < ActiveRecord::Base
has_many :reservations
belongs_to :room_type
end
class Reservation < ActiveRecord::Base
belongs_to :room
belongs_to :agent
end
class Agent < ActiveRecord::Base
has_many :reservations
end
然后只需使用通用表单提交#Rooms整数,让你的控制器处理多个预订......?也许我不能很好地理解你的目标......
答案 2 :(得分:0)
Rails 4有一个你喜欢的名为Store的新功能。您可以轻松地使用它来存储未预定义的哈希集。您可以为它定义一个访问器,建议您将用于序列化商店的数据库列声明为文本,这样就有足够的空间。 original示例:
class User < ActiveRecord::Base
store :settings, accessors: [ :color, :homepage ], coder: JSON
end
u = User.new(color: 'black', homepage: '37signals.com')
u.color # Accessor stored attribute
u.settings[:country] = 'Denmark' # Any attribute, even if not specified with an accessor
# There is no difference between strings and symbols for accessing custom attributes
u.settings[:country] # => 'Denmark'
u.settings['country'] # => 'Denmark'