# Edit in place for select

**URL:** <https://www.ruby-forum.com/t/edit-in-place-for-select/85424>\
**Category:** Rails\
**Created:** [February 13, 2007, 12:50pm UTC](https://www.ruby-forum.com/t/edit-in-place-for-select/85424 "2007-02-13T12:50:48Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Love\_AJAX](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/779978/32.png) [@Love\_AJAX](https://www.ruby-forum.com/u/Love_AJAX)\
**Post date:** [February 13, 2007, 12:50pm UTC](https://www.ruby-forum.com/t/edit-in-place-for-select/85424/1 "2007-02-13T12:50:48Z")

</div>

Hi there,

I am struggling to have an edit in place field for a select control.  
This select control picks its options from a database table.

Googling got me some code examples. But none of them worked for me.  
They all seem to assume things. I’d appreciate if some body can point  
me at a complete code listing or ways to get this done.

Thanks much in advance.

---

<div class="post-metadata">

**Author:** ![Love\_AJAX](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/779978/32.png) [@Love\_AJAX](https://www.ruby-forum.com/u/Love_AJAX)\
**Post date:** [February 28, 2007, 2:20pm UTC](https://www.ruby-forum.com/t/edit-in-place-for-select/85424/2 "2007-02-28T14:20:23Z")

</div>

Thanks Tim. It worked.

To make things little neat, I moved this whole code into a helper  
method that returns me a javascript code.

---

<div class="post-metadata">

**Author:** ![Love\_AJAX](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/779978/32.png) [@Love\_AJAX](https://www.ruby-forum.com/u/Love_AJAX)\
**Post date:** [February 13, 2007, 3:22pm UTC](https://www.ruby-forum.com/t/edit-in-place-for-select/85424/3 "2007-02-13T15:22:47Z")

</div>

Hi ya

Try this…

###Â VIEW ###

Order Status

\<%=@order.status %\>

### HELPER

def map\_statuses(collection)  
collection.map {|status| ‘[’ \<\< status.id.to\_s \<\< ‘,’ \<\<  
“’#{status.status\_name.to\_s}’” \<\< ‘] ,’ }  
end

### CONTROLLER

@order\_statuses = OrderStatus.find(:all)

* * *

I hope that helps

Cheers

Tim

---

<div class="post-metadata">

**Author:** ![Love\_AJAX](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/779978/32.png) [@Love\_AJAX](https://www.ruby-forum.com/u/Love_AJAX)\
**Post date:** [February 28, 2007, 3:03pm UTC](https://www.ruby-forum.com/t/edit-in-place-for-select/85424/4 "2007-02-28T15:03:19Z")

</div>

> To make things little neat, I moved this whole code into a helper  
> method that returns me a javascript code.

For sure 🙂 In the spirit of this forum post up your helper - it might  
help somone in the future with any luck 😉

Cheers

Tim P.

---

<div class="post-metadata">

**Author:** ![Love\_AJAX](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/779978/32.png) [@Love\_AJAX](https://www.ruby-forum.com/u/Love_AJAX)\
**Post date:** [February 28, 2007, 3:05pm UTC](https://www.ruby-forum.com/t/edit-in-place-for-select/85424/5 "2007-02-28T15:05:16Z")

</div>

On Feb 28, 2007, at 8:18 AM, Love AJAX wrote:

> Thanks Tim. It worked.
> 
> To make things little neat, I moved this whole code into a helper  
> method that returns me a javascript code.

If I might suggest a slight improvement:

### HELPER

def map\_statuses(collection)  
collection.map {|status| [status.id, status.status\_name] }.to\_json  
end

Then you don’t have to worry about the potential problem of quotes  
within your status\_name column. ('cause to\_json will handle it for you)

-Rob

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![Love\_AJAX](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/779978/32.png) [@Love\_AJAX](https://www.ruby-forum.com/u/Love_AJAX)\
**Post date:** [March 9, 2007, 2:50pm UTC](https://www.ruby-forum.com/t/edit-in-place-for-select/85424/6 "2007-03-09T14:50:06Z")

</div>

Here it is (modified to my needs):  
#######################  
def in\_place\_select\_editor(options)  
options[:ajax] = { :okText =\> “‘Save’”, :cancelText =\>  
“‘Cancel’”}.merge(options[:ajax] || {})  
script = Array.new  
script \<\< “new Ajax.InPlaceCollectionEditor(”  
script \<\< " ‘#{options[:content][:options][:id]}’,"  
script \<\< " ‘#{url\_for(options[:url])}’,"  
script \<\< " {"  
script \<\< " collection: #{options[:collection]},"  
script \<\< options[:ajax].map{ |key, value| “#{key.to\_s}:  
#{value}” }.join(", “)  
script \<\< “, ajaxOptions: {”  
script \<\< “method: ‘post’}”  
script \<\< " }”  
script \<\< “)”

```
 content_tag(
   options[:content][:element],
   options[:content][:text],
   options[:content][:options]
 ) + javascript_tag( script.join("\n") )

```

end  
#######################

# In view:

\<%= in\_place\_select\_editor( :content =\> {  
:element =\> ‘span’,  
:text =\> get\_role\_name(staff.login\_id),  
:title=\> “”,  
:options =\> {  
:id =\> “user\_role\_name\_#{staff.id}”,  
:class =\> ‘editable-content’  
}  
},  
:url =\> {  
:controller =\> ‘user\_lookup’,  
:action =\> “set\_permissiondata”,  
:id =\> staff.login\_id,  
:fieldname =\> ‘role\_id’  
},  
:ajax =\> {  
:size =\> 15,  
:value =\> “’” +  
get\_role\_name(staff.login\_id)+ “’”  
},  
:collection =\> roles  
) %\>
