从一组选项中选择辅助选项?

时间:2014-05-23 00:13:01

标签: ruby-on-rails ruby form-helpers

我希望能够从现有的城市阵列中选择一个城市。

我已将城市存储在ControllerName控制器中的数组中作为全局变量

$cities = ["city1"...."city20"]

我想通过以下方式访问它们:<%= p.select(:city, $cities{ |c| [c.name, c.id]}) %>

但后来收到错误消息undefined method name for 'city1'

如何从现有阵列中进行选择? 我应该为城市制作一些控制器吗?

更新#1

我来制作这段代码

$cities=['city1',...'city20']

@city = Array.new
i = $cities.size 

i.times do |x|
  @city[x] = City.new
  @city << $cities[x]
end

而不是“City1”的undefined method名称':字符串I got未定义的方法name' for "City20":String

PS:城市表中有一个名为“name”的列,所以问题不是特别在那里

更新#2:问题已解决

在阅读了这篇Rails文档中的一点之后,我能够对我的代码做一点改进,实际上我可以解决这个问题。

在我的表单中,我已将代码编辑为:

<%= p.select(:city, options_for_select( @cities_array ) )%>

在我的ControllerName控制器中,我已经把它:

$cities.length.times do |x|
@city = City.new({:name => $cities[x]})
@city.save
  end


@cities_array = City.all.map { |city| [city.name, city.id] } 

这就是它的全部。

如果您有任何其他解决方案,无论是更简单还是更复杂,请将其作为答案分享。

2 个答案:

答案 0 :(得分:1)

您可以通过多种方式将数据插入数据库。

第一个。在迁移中添加此内容:

rails generate migration add_cities_rows

在您的迁移中,您可以添加以下内容:

cities = ['city1', 'city2', 'city3']
cities.each {|city| City.create(name: city)}

然后你可以运行:rake db:migrate

您可以在db/seeds.rb文件中添加相同的逻辑,这样如果您想重新生成运行rake db:setup的数据库,它就会发挥作用。

view(使用选择助手的地方),您可以使用以下sintaxis来填充选择:

<%= p.select :city, City.pluck(:name, :id) %>

所以在你的控制器中你不需要添加任何逻辑

答案 1 :(得分:0)

此错误是因为'city1'是一个字符串,并且您在未定义的String对象上调用 name 方法。

您可能已经定义了城市模型,并且必须在其中包含数据库列**名称。因此,将为城市对象

定义名称方法

此处, $ cities 是一个字符串数组,应该是城市对象的数组。

,为CITY创建一个控制器并从这些字符串数组中收集城市对象数组并传递给它以查看