2009-11-26 88 views
1

我有一个表单字段,用户输入联系信息,包括姓名,电子邮件等。如果他们已经保存了联系人,我想用他们保存的联系人下拉菜单。选择下拉菜单中的联系人时,应使用该数据填充联系人字段以便于编辑。使用下拉列表和AJAX与Rails填充表格字段

出于某种原因,这种做法是不工作:

在我new.html.erb观点:

<%= f.collection_select :id, @contacts, :id, :name, :onchange => 
remote_function(:url =>{:action => 'populate_contact_form'}, :with => 'id') %> 

在我的控制器:

def populate_contact_form 
raise "I am working up to this point" 
@contact = current_account.contacts.find(params[:id]) 
end 

在populate_contact_form.rjs:

page['contact_name'].value = @contact.name 
page['contact_email'].value = @contact.email 

似乎我的控制器方法从来没有被称为...任何人都可以解释如何做到这一点?

回答

1

它没有被调用,因为你正在使用remote_function不正确。如果这些选项中的任何一个从url选项丢失到remote_function,Rails会假定当前的action/controller/id/etc。您将作为顶级选项传递给remote_function,并将其忽略。使用:url选项Rails假定呈现此视图的操作和控制器相同。

这应该可以解决你的问题:

<%= f.collection_select :id, @contacts, :id, :name, :onchange => 
    remote_function(:url =>{:action => 'populate_contact_form'}, :with => 'id') %> 
+0

谢谢;我做了改变。但是,我的控制器功能仍然没有被调用。我有其他语法问题吗? – icecream 2009-11-27 17:39:55

+0

剩下要做的就是遵循日志。 Firebug和你的服务器日志都会捕获服务器/ javascript返回的错误。 – EmFi 2009-11-27 20:48:17