根据先前的字段选择过滤字段
如何根据以前的字段值使用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