Ich habe folgendes Modell:Warum verursacht dieser Code einen Fehler, wenn er innerhalb des Controllers verwendet wird, aber nicht die Ansicht?
class User
include DataMapper::Resource
property :id, Serial
property :name, String, required: true
property :email, String, required: true, unique: true
property :password_digest, Text
attr_reader :password
attr_accessor :password_confirmation
validates_confirmation_of :password
validates_format_of :email, as: :email_address
has n, :victories
Das funktioniert gut und ermöglicht Menschen auf die Website-up zu unterzeichnen. Allerdings habe ich definiert dann die folgende Route:
get 'users/all' do
@users = User.all
@users.each do |user|
user.name
end
end
Nun wird noch die Anwendung ausgeführt, aber wenn ich zu besuchen versuchen ‚/ Benutzer/alle‘, grüßte ich bin mit „Diese Seite kann nicht erreicht werden“ und die folgenden Terminalfehler:
ERROR Rack::Lint::LintError: Body yielded non-string value #<User @id=1 @name="Iain K" @email="[email protected]" @password_digest=<not loaded>>
Wenn ich diese Logik in einem jedoch Ansicht wickeln, es funktioniert:
get 'users/all' do
@users = User.all
erb(:'users/all')
end
Innen Benutzer/all.erb:
<% @users.each do |user| %>
<li>
Name: <%= user.name %>
</li>
<% end %>
Warum ist das?
Alle Hilfe ist willkommen.
Danke.
Ich realisiere, dass ich '.each' falsch hier verwendet habe. Wenn ich "print user.name" sagen würde, wäre das in Ordnung, oder? (Ich sage nicht, dass es diesen besonderen Fehler gelöst hätte). Danke für deine Hilfe, Max. – IainK
Ja, wenn Sie jede Zeile drucken wollten, die Sinn machen würde. Aber es ist nicht klar, was Sie im ursprünglichen Code versuchten. –
Hey, nur eine späte Folgefrage: Warum muss ich "print" nicht angeben, wenn ich diese Logik in der Ansicht anwende? Danke noch einmal. – IainK