2017-05-25 3 views
0

Von edit.html.erb Ansicht,Über Schienen machen Argument

<%= render 'form', post: @post, url: authors_post_url(@post) %> 

was durch das zweite Argument Beitrag gemeint ist: @post? Ist diese Benennung @post zum Posten in der partiellen _form verwendet?

Von _form.html.erb Teildatei

<%= form_for(post, url: url) do |f| %> 
    <% if post.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(post.errors.count, "error") %> prohibited this post from being saved:</h2> 
     <ul> 
     <% post.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <% if @post.persisted? %> 
    <%= link_to 'Show', @post %> 
    <% end %> 
<% end %> 

Wie oben gesehen, @post noch verwendet werden, die den Zweck der Benennung @post besiegt oben in der Render Zeile zu schreiben.

Antwort

1

Wie oben zu sehen ist, sind @post noch verwendet werden, die den Zweck zu @postpost in der Renderleitung oberhalb der Namensgebung.

Genau! Das ist schlampige Codierung von jemandem. Der Zweck dieser Syntax besteht darin, das Partielle von seiner Umgebung zu abstrahieren, so dass es nicht darauf angewiesen ist, dass @post verfügbar ist. Auf einer anderen Seite kann die teilweise wie dies gemacht werden, zum Beispiel:

<%= render 'form', post: Post.new, url: authors_posts_url) %> 

Wenn die Teil-Regeln folgt und nur verwendet, um seine lokalen post, es wird weiter arbeiten. Aber der von deiner Frage wird es brechen.

Verwandte Themen