Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails—如何仅返回ActiveRecord记录的文本_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails—如何仅返回ActiveRecord记录的文本

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

我有一个城市模型,其中一个属性是城市名称

我已经使用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列表_城市(开始、停止)
城市=城市。查找(:全部,顺序:“名称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)