Ruby on rails Rails—如何仅返回ActiveRecord记录的文本
我有一个城市模型,其中一个属性是城市名称 我已经使用helper方法返回n个城市,实现如下: 助手方法:Ruby on rails Rails—如何仅返回ActiveRecord记录的文本,ruby-on-rails,Ruby On Rails,我有一个城市模型,其中一个属性是城市名称 我已经使用helper方法返回n个城市,实现如下: 助手方法: def list_cities(start, stop) cities = City.find(:all, order: "name asc", limit: stop-start, select: "name") cities.each do |city| "<li> #{city.name} </li>" end end
def list_cities(start, stop)
cities = City.find(:all, order: "name asc", limit: stop-start, select: "name")
cities.each do |city|
"<li> #{city.name} </li>"
end
end
def列表_城市(开始、停止)
城市=城市。查找(:全部,顺序:“名称asc”,限制:停止-开始,选择:“名称”)
城市。每个城市都有|
“{city.name} ”
结束
结束
查看代码:
<%= list_cities(1,22) %>
但是,它会在视图中返回以下内容:
[#<City name: "Abilene">]
<% @cities.each do |city| %>
<li><%= city.name %></li>
<% end %>
[#]
如何仅获取城市名称的文本,并删除查询的其余部分?问题在于,您的方法list\u cities不会返回您认为它会返回的字符串。它只返回一个城市对象数组,因为每个方法都是这样做的。看起来您正在将控制器和视图逻辑混合到助手中。我要做的是: 在控制器中设置@cities实例变量:
@cities = City.find(:all, order: "name asc", limit: stop-start, select: "name")
他认为:
[#<City name: "Abilene">]
<% @cities.each do |city| %>
<li><%= city.name %></li>
<% end %>
通过这种方式,您可以将控制器和视图逻辑分开。问题在于,您的方法列表不会返回您认为会返回的字符串。它只返回一个城市对象数组,因为每个方法都是这样做的。看起来您正在将控制器和视图逻辑混合到助手中。我要做的是: 在控制器中设置@cities实例变量:
@cities = City.find(:all, order: "name asc", limit: stop-start, select: "name")
他认为:
[#<City name: "Abilene">]
<% @cities.each do |city| %>
<li><%= city.name %></li>
<% end %>
这样,您就可以将控制器和视图逻辑分开。Erez回答的是解决此问题的最佳方法。但我想和大家分享一下,你可以对你的方法做些什么,用最少的改变来实现你想要的。您需要将助手更改为以下内容
def list_cities(start, stop)
cities = City.all(order: 'name ASC', limit: stop - start, select: 'name')
cities.map { |city| "<li> #{city.name} </li>" }.join.html_safe
end
def列表_城市(开始、停止)
cities=City.all(顺序:'name ASC',限制:停止-开始,选择:'name')
cities.map{| city |“{city.name} ”}.join.html|u safe
结束
其他的更改只是为了减少代码而进行的小重构。在不知道您使用的rails版本的情况下,我没有更改查询,但是如果您使用的是3.2,您应该可以访问
pulk
,这会更快,因为它不会创建ActiveRecord对象。Erez回答的是解决此问题的最佳方法。但我想和大家分享一下,你可以对你的方法做些什么,用最少的改变来实现你想要的。您需要将助手更改为以下内容
def list_cities(start, stop)
cities = City.all(order: 'name ASC', limit: stop - start, select: 'name')
cities.map { |city| "<li> #{city.name} </li>" }.join.html_safe
end
def列表_城市(开始、停止)
cities=City.all(顺序:'name ASC',限制:停止-开始,选择:'name')
cities.map{| city |“{city.name} ”}.join.html|u safe
结束
其他的更改只是为了减少代码而进行的小重构。在不知道您使用的rails版本的情况下,我没有更改查询,但是如果您使用的是3.2,您应该可以访问pulk
,这会更快,因为它不会创建ActiveRecord对象。尝试:
def list_cities(start, stop)
content = ''
cities = City.find(:all, order: "name asc", limit: stop-start, select: "name")
cities.each do |city|
content << "<li> #{city.name} </li>\n"
end
content
end
def列表_城市(开始、停止)
内容=“”
城市=城市。查找(:全部,顺序:“名称asc”,限制:停止-开始,选择:“名称”)
城市。每个城市都有|
内容尝试:
def list_cities(start, stop)
content = ''
cities = City.find(:all, order: "name asc", limit: stop-start, select: "name")
cities.each do |city|
content << "<li> #{city.name} </li>\n"
end
content
end
def列表_城市(开始、停止)
内容=“”
城市=城市。查找(:全部,顺序:“名称asc”,限制:停止-开始,选择:“名称”)
城市。每个城市都有|
听起来你在寻找勇气:听起来你在寻找勇气:好吧,这对我来说很有用。但我想接下来的问题是,如果这种逻辑不应该放在helper中,那么helper方法的理想用途是什么?好的,这对我来说很有用。但我想接下来的问题是,如果这种逻辑不应该放在助手中,那么助手方法的理想用途是什么?我确实可以使用Pull。然后查询是否为:City.all(顺序:'name ASC',限制:stop start)。pull(:name)?否。它应该像City.order('name ASC').limit(stop-start)。purch(:name)
一样链接。我确实可以访问purch。然后查询是否为:City.all(顺序:'name ASC',限制:stop start)。pull(:name)?否。它应该像City.order('name ASC').limit(stop-start)。pull(:name)