集合在Rails中选择条件

时间:2014-04-28 06:48:48

标签: ruby-on-rails ruby-on-rails-3.2

我有两个模型关联看起来像:

User has_one Office

Office belongs_to User

对于Attrubutes看起来像:

User:id,name

Office:id,user_id,address

添加新办公室并选择用户的方案如下:

<%= f.select :user_id, options_for_select([["Choose User", "0"]] + User.all.collect {|x| [x.name, x.id] if Office.find_by_user_id(x.id).nil? == true }), {}%>

如果用户有办公室,则用户不会在选择标记中显示。

问题:

我有一个用户&#39; A&#39;用户&#39; A&#39;添加新办公室时出现在选择标记上。

<select id="office_user_id" name="office[user_id]"><option value="0">Choose User</option>
<option value="1">A</option></select>

当我再次添加新办公室时,选择标记有空白选项

<select id="office_user_id" name="office[user_id]"><option value="0">Choose User</option>
<option></option></select>

当我有两个用户时:用户&#39; A&#39;没有办公室和用户&#39; B&#39;太

<select id="office_user_id" name="office[user_id]"><option value="0">Choose User</option>
<option value="1">A</option>
<option value="2">B</option></select>

用户&#39; A&#39;有一个办公室和用户&#39; B&#39;避难所&#39;吨

<select id="office_user_id" name="office[user_id]"><option value="0">Choose User</option>
<option></option>
<option value="2">B</option></select>

用户&#39; B&#39;有一个办公室和用户&#39; A&#39;避难所&#39;吨

<select id="office_user_id" name="office[user_id]"><option value="0">Choose User</option>
<option value="1">A</option>
<option></option></select>

用户&#39; A&#39;有一个办公室和用户&#39; B&#39;太

<select id="office_user_id" name="office[user_id]"><option value="0">Choose User</option>
<option></option>
<option></option></select>

1 个答案:

答案 0 :(得分:0)

users = User.includes(:office)

它只会触发两个查询。

f.select :user_id, options_for_select(users.collect {|x| [x.name, x.id] if x.office.nil?}.compact), prompt: "Please select"

或者您可以使用join