Tôi có một cuộc gọi một phần ban đầu trông như thế này:Tại sao khai báo biến cục bộ này không hoạt động?
<% events_array.each_with_index do |event, index| %>
<%= render partial: "events/activities/#{event.action}", locals: {event: event, index: index} %>
<section class="card-overlay valign-wrapper">
<div class="valign col s12 m6 l4 card-container">
<%= render partial: 'nodes/node', locals: {node: event.eventable.node, node_counter: index} %>
</div>
</section>
<% end %>
Đó gọi này nodes/node
từng phần (cắt ngắn cho ngắn gọn):
<div class="col s12 m6 l4 card-container">
<div class="card" id="card-<%= node_counter %>">
<!-- Card Content -->
<div class="card-content" style="background-image: url('<%= node.media.try(:thumbnail_url) %>');">
ở đâu bây giờ tôi nhận được lỗi này:
undefined local variable or method `node_counter' for #<#<Class:0x007f9067394f50>:0x007f9063b7d8b0>
Tại dòng này:
<div class="card" id="card-<%= node_counter %>">
Tại sao tùy chọn locals
của tôi render partial:...
không giải quyết vấn đề này?
Lưu ý rằng khai báo cục bộ trước đó của việc hiển thị một phần khác hoạt động tốt mà không có lỗi, do đó, không chắc chắn tại sao điều này không hoạt động.
Sửa 1
Đây là toàn bộ phần tìm thấy tại app/views/nodes/_node.html.erb
<div class="col s12 m6 l4 card-container">
<div class="card" id="card-<%#= node_counter %>">
<!-- Card Content -->
<div class="card-content" style="background-image: url('<%= node.media.try(:thumbnail_url) %>');">
<video id="video_<%= node_counter %>" class="card-video video-js vjs-default-skin" controls preload="none" data-setup="{}">
<source src="<%= node.media.try(:zc_mp4_url) %>" type='video/mp4' />
<p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
</video>
<a class="video-close"><i class="icon-close"></i></a>
<div class="card-attr">
<!-- Favorites -->
<%= show_favorites_button(node, node_counter) %>
<%= favorites_count(node) %>
<!-- Comments -->
<%= comments_count(node) %>
</div>
<!-- Tagged Users -->
<div class="card-tagged-users">
<%= render partial: "nodes/tagged_user", collection: node.tagged_users %>
<span class="tagged-count"><%= node.cached_num_user_tags %></span>
</div>
<h3 class="card-title"><%= node.name %></h3>
</div>
<!-- End Tagged Users -->
<!-- Card Meta -->
<div class="card-meta">
<aside>
<%= image_tag node.user.avatar.url, class: "card-author-avatar", alt: "" %>
</aside>
<section>
<h6 class="card-author-name"><%= node.user.name %></h6>
<time class="card-date"><%= node.created_at.strftime("%B %d, %Y") %></time>
<p class="card-desc"><%= node.media.description %>
</section>
</div>
<!-- End Card Meta -->
<!-- Card Comments -->
<div class="card-comments-container">
<h4 class="card-comments-title"><%= pluralize(node.comments_count, "Comment") %></h4>
<a class="card-comments-expand"><i class="icon-arrow-down"></i></a>
<div class="card-comments">
<%= render partial: "nodes/comment", collection: node.comments.includes(:user).order(created_at: :desc) %>
</div>
</div>
<!-- End Card Comments -->
<!-- Card Input -->
<div class="card-input">
<%= simple_form_for([node, Comment.new], html: { id: "new_comment_card-#{node_counter}"}, remote: true) do |f| %>
<%= f.error_notification %>
<%= f.input_field :message, as: :text, id: "card-input-field-card-#{node_counter}", class: "input-field", placeholder: "Share your thoughts", cols: "30", rows: "10", "data-behavior" => "submit_on_enter" %>
<%= f.button :submit, "Submit", name: "card_id", value: "card-#{node_counter}", id: "submit-card-#{node_counter}", class: "comment-submit", data: { disable_with: "Submitting Comment..." } %>
<% end %>
</div>
<!-- End Card Input -->
<!-- End Card Content -->
</div>
</div>
Chỉnh sửa 2
Vì vậy, bên trong lỗi tốt hơn, ít REPL trong phạm vi quan điểm mà tôi gọi một phần trên, tức là đoạn mã đầu tiên trong câu hỏi này, tôi đã chơi xung quanh với bảng điều khiển và thấy rằng các biến cục bộ trong giây phần ond không được gán gì cả, mặc dù giá trị của chúng trả lại giá trị hợp pháp:
>> node
!! #<NameError: undefined local variable or method `node' for #<#<Class:0x007fbf389e01c0>:0x007fbf30cd3358>>
>> event.eventable.node
=> #<Node id: 3, name: "Outro", family_tree_id: 1, user_id: 1, media_id: 3, media_type: "Video", created_at: "2015-07-25 04:28:39", updated_at: "2015-08-01 23:11:26", circa: nil, is_comment: nil, cached_votes_total: 0, cached_votes_score: 0, cached_votes_up: 0>
>> node_counter
!! #<NameError: undefined local variable or method `node_counter' for #<#<Class:0x007fbf389e01c0>:0x007fbf30cd3358>>
>> index
=> 0
>>
Tại sao việc chuyển nhượng không xảy ra?
Điều gì sẽ xảy ra nếu bạn nhận xét '<% = node_counter%>'? Bạn có gặp lỗi tại '<% = node.media.try (: thumbnail_url)%>'? – tompave
Câu hỏi hay. Tôi chưa bao giờ thử điều đó trước đây, nhưng tôi đã làm và bây giờ tôi nhận được một 'biến địa phương hoặc phương thức 'nút' không xác định tại dòng đó. Có phải tôi không thể hiển thị hai phần tử trong cùng một lần lặp của khối 'mỗi' không? – marcamillion
Không, đó không phải là vấn đề. Bạn có thể đăng toàn bộ một phần và toàn bộ đường dẫn/tên tệp không? – tompave