ruby-on-rails - what - software ruby on rails




Ruby/Rails-.each Iterator sta stampando l'intero array alla fine del ciclo (2)

Penso che quello che sto cercando di fare sia piuttosto semplice, e non sono davvero sicuro del perché questo non funzioni. Sto usando Rails 3.

In sostanza, sto solo provando a selezionare i valori distinti da una colonna in un modello esistente e stamparli tutti. Per la maggior parte, questo funziona, ma il ciclo .each nella mia vista finisce anche per stampare l'intero array alla fine del ciclo. (

Ho un modello chiamato Attractions, e ogni attrazione ha una categoria (in questo momento la categoria è hardcoded nel DB per semplicità).

Questo è il modello di attrazione e un metodo di classe "tutte_categorie" definito ...

class Attraction < ActiveRecord::Base

  def self.all_categories
    Attraction.select("DISTINCT category")
  end

end

Questo è il controller di attrazione

class AttractionsController < ApplicationController
  def index
    @categories = Attraction.all_categories
    @attractions = Attraction.find(:all)
  end

  def show
    @attraction = Attraction.find(params[:id])
  end
end

Questo è il codice secondo me che causa problemi - niente scienza missilistica, solo un semplice iteratore, ...

  <%= @categories.each do |c| %>
    <%= c.category %><br/>
  <% end %>

Abbastanza semplice, vero? Tutto sta andando bene, ma questo è quello che vedo quando viene eseguito quel segmento di codice:

Architecture
Art
Fashion
Music
[#<Attraction category: "Architecture">, #<Attraction category: "Art">, #<Attraction category: "Fashion">, #<Attraction category: "Music">]

Perché la matrice alla fine è stampata? Tutto quello che voglio è un elenco delle categorie:

Architecture
Art
Fashion
Music

Ovviamente, sono nuovo di Ruby / Rails e ho cercato di cercare dappertutto una soluzione a questo. C'è qualcosa di ovvio che mi manchi?

Apprezzo qualsiasi aiuto.


È perché è quello che succede quando lo fai

def self.all_categories
  Attraction.select("DISTINCT category")
end

Crea un oggetto Attrazione con attributo definito dal tuo campo. Tu puoi fare

def self.all_categories
  Attraction.select("DISTINCT category").map(&:category)
end

# Change this line with an =:
<%= @categories.each do |c| %>
# ...to this:
<%  @categories.each do |c| %>

Vuoi solo gli effetti collaterali sul blocco del metodo #each , non vuoi l'interpolazione del valore restituito.





ruby-on-rails-3