我有两个模型关联看起来像:
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>
等
答案 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
。