option_groups_from_collection_for_select是否已撤消?

时间:2014-11-10 12:25:49

标签: ruby-on-rails

我有两个型号:

class Account < ActiveRecord::Base
  has_many :cost_centres
end

class CostCentre < ActiveRecord::Base
  belongs_to :account
end

我正在尝试使用它们来填充分组选择框,具体取决于特定用户拥有的访问权限。

如果用户具有帐户级别的访问权限,则会自动授予他们访问所述帐户下所有费用中心的权限,这意味着我可以使用以下内容轻松填充选择框:

@accounts = Account.where(id: [1,2,3])

<%= select_tag :cost_centre, option_groups_from_collection_for_select(@accounts, :cost_centres, :title, :id, :name), { prompt: t(:select_a_cost_centre), class: %w(updateOptions col-md-12), :data => { :element => '#cost_centre_options' } } %>

产生类似这样的东西:

<select name="cost_centre" id="cost_centre" class="updateOptions col-md-12" data-element="#cost_centre_options">
    <option value="">Select A Cost Centre</option>
    <optgroup label="Conn, Gutkowski and Pouros">
        <option value="11117">Becker Inc</option>
        <option value="11119">Batz Inc</option>
        <option value="11127">Konopelski Inc</option>
    </optgroup>
    <optgroup label="Tillman, Collins and Kautzer">
        <option value="11136">Batz-Willms</option>
        <option value="11141">Schaefer, Reilly and Miller</option>
        <option value="11138">Paucek-Hammes</option>
    </optgroup>
</select>

到目前为止一直很好 - 我遇到的问题是有些用户没有帐户级访问权限,而只允许访问特定的成本中心。

在指定成本中心后,如何获得与上述相似的选择(按帐户分组的成本中心),即:

@cost_centres = CostCentre.where(id: [1,2,3])

谢谢..

(PS,我确实看了一下:http://gamonrails.gamov.net/post/100737980199/rails-grouped-selects - 因为我觉得这样做我需要的,但是我无法让它发挥作用。)

1 个答案:

答案 0 :(得分:0)

我想这应该适合你。

cost_centres = CostCentre.where(id: [1,2,3]).pluck(:account_id)
@accounts = Account.where('id in ?', cost_centres)

<%= select_tag :cost_centre, option_groups_from_collection_for_select(@accounts, :cost_centres, :title, :id, :name), { prompt: t(:select_a_cost_centre), class: %w(updateOptions col-md-12), :data => { :element => '#cost_centre_options' } } %>