每个人,我都是铁杆新手。提前感谢您的帮助。
我在哪里:
用户正在尝试创建新的"挑战",其中我使用其他模型属性的所有实例列表中的Select
语句。
例如:
创建一个挑战,我可以选择所有用户中的一个城市'城市,
它有效。但由于city
列不是用户的必需属性,因此某些用户city
为nil
(未在其个人资料中更新)。
观察:
我的选择下拉列表显示: 空白 空白 空白 堪萨斯 丹佛 空白 波士顿 等等...
这是选择:
<div class="form-group">
<%= f.select :challenge_city, User.all.collect{ |n| [n.user_city, n.id] }.insert(0, "Select a city for your challenge") %>
</div>
```
再次感谢。
答案 0 :(得分:2)
此特定示例应在范围内处理,例如:
class User
scope :with_city, -> { where('user_city IS NOT NULL') }
end
然后用
调用它 User.with_city # => all users which have non-nil cities
作为旁注,此示例在视图代码中有太多逻辑。您应该考虑将该逻辑提取到控制器,装饰器或其他地方。
在控制器中:
@challenge_options = User.with_city.collect { |n| ... }.insert {...}
在视图中:
<%= f.select :challenge_city, @challenge_options %>
答案 1 :(得分:0)
我同意gdpelican您的观点包含太多逻辑。但是,由于你有一个列城市,你可以/应该将其进一步推向模型
您可以通过以下方式获取特定城市的所有用户:
User.find_all_by_city some_city_name
或者如果你只想快速解决问题,你可以“紧凑”#34;您的收集块返回的数组
<%= f.select :challenge_city, User.all.collect{ |n| [n.user_city, n.id] if n.user_city }.compact.insert(0, "Select a city for your challenge") %>
将删除数组中的nil元素