Mühe auf die Wiedergabe einer Vorlage übergeben eine lokale variable
Ich bin mit Ruby on Rails 3 und ich würde gerne Rendern eines templates ( show.html.erb
), die eine lokale variable.
In RAILS_ROOT/views/users/show.html.erb
ich habe
Name: <%= @user.name %>
Surname: <%= @user.surname %>
Habe ich auch eine Seite mit controller zu handhaben Seiten und in der application_controller.rb
eine istance von @current_user
. Eine Seite aufgerufen wird user
, so in RAILS_ROOT/views/pages/user.html.erb
ich habe
<%= render :template => "users/show", :locals => { :user => @current_user } %>
Der obige code nicht funktioniert (ich bekomme diese Fehlermeldung: RuntimeError in Pages#user, Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
), aber das funktioniert:
<%= render :template => "users/show", :locals => { :user => @user = @current_user } %>
Ich denke, es ist nicht ein guter Ansatz zu "überschreiben" die @user
variable. Dies ist, weil, zum Beispiel, wenn ich brauche zu erinnern @user
nach oben 'render' - Anweisung wird nicht mehr funktionieren.
Also, was ist die Lösung, um show.html.erb
?
Ich versuchte auch
<%= render :template => "users/show", :locals => { @user => @current_user } %>
<%= render :template => "users/show", :locals => { :object => @current_user, :as => @user }
aber diese funktionieren nicht.
UPDATE
Wenn in pages_controller.rb
ich diese
def user
@user ||= @current_user
end
wird es funktionieren und in der Ansicht Dateien können Sie einfach
<%= render :template => "users/show" %>
Sowieso, entdeckte ich, dass ich diese Fehlermeldung (siehe unten für mehr info):
ActionController::RoutingError in Pages#user
No route matches {:action=>"destroy", :controller=>"users"}
Der Fehler wird generiert, aus dieser form - Anweisung befindet sich in einem teilweise geladen show.html.erb
:
<%= form_for(@user, :url => user_path) do |f| %>
...
<% end %>
Du musst angemeldet sein, um einen Kommentar abzugeben.
und in Vorlage
Lokale Variablen sind lokal, also brauchen Sie nicht
@
zu finden Sie.@user502052
Sie können render-view explizit von Ihrem controller.
Wenn Sie nicht ausführen
render
im controller, framework, dass für Sie mit den Standardeinstellungen. Wenn Sie das tun, können Sie verschiedene template-Datei übergeben, lokale Variablen, Rendern teilweise: allesrender
- Funktion unterstützt.@user
(andere Steuerungen hängen von der Anweisung@user
), ich brauche zu verwenden, die "format".@user
stattuser
in meine Ansichten, was muss ich ändern inusers_controller.rb
wenn ich zum Beispieldef show @user = User.find(params[:id]) ... end
?Den Fall, Sie sind NICHT Rendern eine teilweise, und wollen nicht zu verwenden :option "Vorlage", dies kann auch durchgeführt werden in Rails mit 4:
Url:
dies ruft der Benutzer die Methode auf pages_controller. Sie haben diese:
Rails erstellt eine Instanz-variable @Benutzer und standardmäßig wird versucht zu Rendern eines view-template in app/views/pages/user.html-Code.erb. Wenn das ist nicht, was Sie wollen, Sie haben so zu sagen in der Steuerung:
Wird dieses jetzt Rendern app/views/users/show.html-Code.erb, mit einer lokalen variable namens user anstelle der Standard-app/views/pages/user.html-Code.erb.
Derzeit warten Sie, bis Sie in einem view-template und dann Fragen zum Rendern anderen anzeigen-Vorlage. Wenn Sie in einem view-template sollten Sie nur brauchen, um render partial-templates:
Hoffentlich das hilft zu klären.