SitePoint Sponsor

User Tag List

Results 1 to 4 of 4
  1. #1
    SitePoint Zealot
    Join Date
    Sep 2000
    Location
    England
    Posts
    120
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    observe_field inserted select not submitting

    I'm trying to set up a form that among other things includes two related select drop-downs, where the choice the user makes for the first select will then re-load the second select list with the relevant options.

    The problem I'm having is that by re-inserting the select using observe_field, the inserted select's value never gets sent with the rest of the form data. Is this a known problem and is there a way around it?

    My edituser.rhtml
    Code:
    <h2>Edit user <%= @user.firstname + ' ' + @user.lastname %></h2>
     
     
     <h3><%= @user.firstname %>'s permissions</h3>
     
     <%= form_tag :action => 'addpermission' %>
     <table id="permissions">
     	<thead>
     		<tr>
     			<th>Controller</th>
     			<th>Action</th>
     			<th>ID</th>
     			<th>Allow/Disallow</th>
     			<th>Moderate</th>
     		</tr>
     	</thead>
     	<tbody>
     <% for permission in @user.permissions %>
     		<tr>
     			<td><%= link_to permission.controller, :controller => permission.controller %></td>
     			<td><%= (permission.action == '') ? link_to('All', :controller => permission.controller) : link_to(permission.action, :controller => permission.controller, :action => permission.action) %></td>
     			<td><%= (permission.target_id == 0) ? 'All' : permission.target_id %></td>
     			<td>
     				<%= (permission.allow == 1) ? 'Allowed' : '' %>
     				<%= (permission.disallow == 1) ? 'Disallowed' : '' %>
     			</td>
     			<td><%= (permission.moderated == 1) ? 'Yes' : 'No' %></td>
     		</tr>
     <% end %>
     		<tr>
     			<td colspan="5">
     				<h4>Add a permission</h4>
     				<%= hidden_field 'permission', 'user_id', :value => params[:id] %>
     			</td>
     		</tr>
     		<tr>
     			<td><%= select 'permission', 'controller', @cs %></td>
     			<td id="actionlist">
     				<%= select 'permission', 'action', [ ['Choose a controller first', 'debug'] ]%>
     			</td>
     			<td><%= text_field 'permission', 'target_id', :size => 4 %></td>
     			<td><%= select 'other', 'allowdisallow', %w{ Allow Disallow } %></td>
     			<td><%= select 'permission', 'moderated', [ ['No', 0], ['Yes', 1] ] %></td>
     		</tr>
     		<tr>
     			<td colspan="5">
     				<%= submit_tag 'Create permission' %>
     			</td>
     		</tr>
     	</tbody>
     </table>
     <%= end_form_tag%>
     <%= observe_field("permission_controller",
     	:frequency => 0.5,
     	:update => "actionlist",
     	:url => { :action => 'controller_action_list' },
     	:with => "'ctrl='+value") %>
    The two selects in question being permission_controller and permission_action. The observe_field submits to controller_action_list to create the new select:

    controller_action_list:
    Code:
    	def controller_action_list
     		if @params['ctrl'] != 'Please choose a controller'
     			# turn back into class name
     			ctrl = params['ctrl'].sub(/[a-z]/) {|match| match.upcase}
     			ctrl = ctrl.gsub(/_([a-z])/) {|match| match.upcase.sub(/_/, '')}
     			ctrl += "Controller"
     			
     			@c = Object.const_get(ctrl).new
     
     		end
     		
     		render(:layout => false)
     	end
    And controller_action_list.rhtml
    Code:
    <% if @params['ctrl'] != 'Please choose a controller' %>
     <select name="permission[action]" id="permission_action">"
     	<option value="">All <%= @c.controller_name %> actions</option>
     	<% for m in @c.public_methods(false) %>
     	<option value="<%= m %>"><%= m %></option>
     	<% end %>
     </select>
     <% else %>
     <select name="permission[action]" id="permission_action">
     	<option value="">Choose a controller first</option>
     </select>
     <% end %>
    If the form is submitted without the observe_field being triggered, then the permissions[action] value is sent fine. Once the select has been re-written that form attribute simply never gets sent.

  2. #2
    SitePoint Zealot
    Join Date
    Sep 2000
    Location
    England
    Posts
    120
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    No-one? :/

  3. #3
    SitePoint Enthusiast
    Join Date
    Feb 2006
    Posts
    28
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Code:
    <%= observe_field("permission_controller",
     	#:frequency => 0.5,
     	:update => "actionlist",
     	:url => { :action => 'controller_action_list' },
     	:with => "ctrl") %>
    try it like that it should produce ctrl=#{value} on calls

  4. #4
    SitePoint Zealot
    Join Date
    Sep 2000
    Location
    England
    Posts
    120
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Sorry, I might not have explained the problem properly. I can update the second list fine (actually replaces it), so you can then choose your option in the second list, but then when you submit the form, the value of the second (AJAX-created) list is not posted.

    It seems that the second select is being pulled out of the context of the form when it's replaced, even though it's put back in the same place, inside the form.


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •