Rails, Remove NIL attributes from select, Possible?



大家好,我是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元素

最新更新