大家好,我是rails的新手。提前感谢您的帮助
我在这里:
用户正在尝试创建一个新的"挑战",其中我使用其他模型属性的所有实例列表中的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>
```
再次感谢。
这个特殊的例子应该在一个范围内处理,比如:
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 %>
我同意gdpelican的观点,即您的视图包含太多逻辑。但既然你有一个列城市,你可以/应该把它进一步推到模型中
您可以通过以下途径获取特定城市的所有用户:
User.find_all_by_city some_city_name
或者,如果你只是想快速修复,你可以"压缩"你的收集块返回的阵列
<%= 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元素