根据先前的字段选择过滤字段

如何根据以前的字段值使用simple_form过滤字段?

例如,我有一个机会表单,有两个字段,公司和联系人。

公司领域:

:account, :value_method => :id %>

联系领域:

  
lambda { |contact| "#{contact.first_name} #{contact.last_name}" }, :value_method => :id %>

这就是我想要做的:如果我从上面的公司字段中选择一个名为“Deviant”的公司,我希望Contact字段只显示与公司名为“Deviant”相关联的那些联系人。

我正在尝试这样的事情,但无法让它发挥作用:

  
lambda { |contact| "#{contact.first_name} #{contact.last_name}" }, :value_method => :id %>

我不知道如何在公司字段中引用该值。

我怎样才能做到这一点?

谢谢。

更新

任何人? 当然这一定是可能的。 这是任何forms的关键function。 我希望我不需要jQuery或其他东西。

我认为最好的方法是在公司选定的值发生变化时,使用ajax请求以dinamically方式更新您的联系人集合。

首先,您需要在联系人控制器中执行操作:

应用程序/控制器/ contacts_controller.rb

 class ContactsController < ApplicationController def contacts_list if params[:company_id] @contacts = Contact.where(company_id: params[:company_id]) else @contacts = Contact.all end respond_with(@contacts) do |format| format.json { render :json => @contacts.to_json(:only => [:id, :first_name, :last_name]) } end end end 

将其添加到您的路线:

配置/ routes.rb中

  post 'contacts_list' => "contacts#contacts_list", as: :contacts_list 

然后使用下面的coffeescript代码填充联系人的集合:

应用程序/资产/ javasctipts / companies.js.coffee

 $(document).ready -> if $("#opportunity_company_id") populate_contacts() $("#opportunity_company_id").change -> populate_contacts() populate_contacts = -> $contacts_select = $("select#opportunity_contact_id") $contacts_select.attr "disabled", "disabled" company_id = $("select#opportunity_company_id").val() if company_id is "" $contacts_select.html "" else $contacts_select.html "" data = {company_id: company_id} data[window._auth_token_name] = window._auth_token $.ajax "/contacts_list", type: "post" dataType: "json" data: data success: (contacts) -> _html = '' _html += '' for contact in contacts $contacts_select.html _html $contacts_select.removeAttr "disabled" error: -> alert 'Error trying to load contacts.' 

最后,在html的head标签内:

 <% if protect_against_forgery? %>  <% end %> 

希望能帮助到你…

更新:将以下行添加到ApplicationController(app / controllers / application_controller.rb):

 respond_to :html, :xml, :json, :js