diff --git a/app/controllers/devices_controller.rb b/app/controllers/devices_controller.rb index 5f74b60..7b005c2 100644 --- a/app/controllers/devices_controller.rb +++ b/app/controllers/devices_controller.rb @@ -1,29 +1,52 @@ class DevicesController < ApplicationController + + before_filter :find_device, :except => [:new, :create] + before_filter :expand_details, :only => [:show, :edit] + before_filter :flatten_details, :only => [:create, :update] + def new @device = Device.new(:category => params["category"]) @groups = DeviceInformation.groups(params["category"]) end def create - details = [] - - params["details"].each do |group, fields| - fields.each do |name, value| - details << { :group => group, :name => name, :value => value } - end - end - - device = Device.create(params["device"].merge(:details_attributes => details, :room_id => params["room_id"])) + device = Device.create(device_params) redirect_to room_device_path(params["room_id"], device.id) end - def show + def update + @device.update_attributes(device_params) + redirect_to room_device_path(params["room_id"], @device.id) + end + + private + + def find_device @device = Device.find(params["id"]) + end + + def expand_details @groups = DeviceInformation.groups(@device.category) + @details = Hash.new { |h,k| h[k] = {} } @device.details.each do |d| @details[d.group][d.name] = d.value end end + + def flatten_details + @details = [] + + params["details"].each do |group, fields| + fields.each do |name, value| + @details << { :group => group, :name => name, :value => value } + end + end + end + + def device_params + params["device"].merge(:details_attributes => @details, :room_id => params["room_id"]) + end + end diff --git a/app/views/devices/edit.html.haml b/app/views/devices/edit.html.haml new file mode 100644 index 0000000..a6fdeff --- /dev/null +++ b/app/views/devices/edit.html.haml @@ -0,0 +1,13 @@ += form_for(@device, :url => room_device_path(@device), :method => :put) do |f| + = f.label :name + = f.text_field :name + = f.hidden_field :category + + - @groups.each do |group| + %h3= group.name + - group.fields.each do |field_name| + %p + = label_tag "details[#{group.name}][#{field_name}]", "#{field_name}:" + = text_field_tag "details[#{group.name}][#{field_name}]", + @details[group.name][field_name] + = submit_tag \ No newline at end of file