我是新手上的ruby(和StackoverFlow作为注册会员)
但是,我知道我可以使用myString.split(",")
分割字符串,例如
那不是问题。
我有什么:
另一种形式的动态数量的嵌套表单字段,到目前为止一切正常
我想做什么:
我在每个嵌套表格中都有一个Textarea。
用户应输入多个单词,由","
分隔
这些单词应保存为Array,
,以便我稍后可以通过@sector.climbing_routes
(作为数组)调用它们。
现在“climbing_routes”只是一个很长的字符串。
我该如何处理这个问题?
以下是一些代码:
_sector_fields.html.erb (Nested Fields):
<div class="sector">
Sektor:
<table>
<tr>
<th><%= f.label :name %></th><th><%= f.label :description %></th><th><%= f.label :climbing_routes %></th>
</tr>
<tr>
<th><%= f.text_field :name %></th>
<th rowspan="5"><%= f.text_area :description, :rows => 5 %></th>
<th rowspan="5" ><%= f.text_area :climbing_routes , :rows => 6%></th>
</tr>
<tr>
<th>Bild 1</th>
</tr>
<tr>
<th><%= f.file_field :topo %></th>
</tr>
<tr>
<th>Bild 2</th>
</tr>
<tr>
<th><%= f.file_field :topo2 %></th>
</tr>
</table>
</div>
架构部门:
create_table "sectors", :force => true do |t|
t.string "name"
t.string "topo"
t.string "topo2"
t.string "description"
t.integer "climbing_area_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "climbing_routes"
end
答案 0 :(得分:0)
您可以做的一件事就是将它们存储为以逗号分隔的列表,然后覆盖rails模型为您提供的默认getter:
def climbing_routes
read_attribute(:climbing_routes).split(",")
end
或者,如果你不打算一直想要数组,并且宁愿保留默认的getter,你可以创建一个单独的方法并在需要时调用它
def climbing_routes_array
self.climbing_routes.split(",")
end
希望这有帮助!
答案 1 :(得分:0)
在数据库架构中,将climbing_routes从“string”更改为“text”。
在sector.rb ...
serialize :climbing_routes
def climbing_routes=( x )
write_attribute( :climbing_routes, x.split(/ *, */) )
end
在数据库中,climbing_routes将存储为YAML,当您访问它时,它将以数组形式出现。
由于您正在处理用户输入,我使用/ *,* /来分割climbing_routes数据,以便忽略逗号周围的任何额外空格。
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-serialize