我有两个型号:
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 - 因为我觉得这样做我需要的,但是我无法让它发挥作用。)
答案 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' } } %>