local variables in _form.html.erb undefined

356 views
Skip to first unread message

fugee ohu

unread,
Feb 8, 2018, 6:37:36 PM2/8/18
to Ruby on Rails: Talk
_active_record_post_comments.html.erb

<div id="comments">
  <%= render post.comments %>
</div>
<% if (user_signed_in? && current_user != User.find(post.blogger_id)) %>
    <div>
<%= render partial: "blogit/comments/form", locals: { post: post, comment: comment } %>
</div>
<% end %>

_form.html.erb

<%= form_for [post, comment], remote: true,
  html: {
    class: "new_blog_comment", id: "new_blog_comment" } do |f| -%>
 
error:
ActionView::Template::Error (undefined local variable or method `post' for #<#<Class:0x007f606c7b4818>:0x007f607eeeb278>
Did you mean?  @post):
    1: 
    2: <%= form_for [post, comment], remote: true,
    3:   html: {
    4:     class: "new_blog_comment", id: "new_blog_comment" } do |f| -%>

Walter Lee Davis

unread,
Feb 8, 2018, 7:41:19 PM2/8/18
to rubyonra...@googlegroups.com
Show the code where you are trying to render this form. A partial that renders implicitly (like in a scaffolded CRUD form):

#/app/views/posts/new.html.erb
<%= render 'form' %>

...will get a local variable named `post` in the render context.

What does your controller look like, and what does the enclosing template look like that is rendering this partial?

Walter
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/4d482d1f-748e-465a-a541-ca9a069ed6a1%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

fugee ohu

unread,
Feb 9, 2018, 9:38:17 AM2/9/18
to Ruby on Rails: Talk
  class PostsController < ::Blogit::ApplicationController

    def show
      @post = Post.find(params[:id])
    end


show.html.erb
<%= render @post %>
<%= share_bar_for @post %>
<%= render "blogit/posts/post_footer", post: @post %>
<%= comments_for @post %>
 
posts_helper.rb

    def comments_for(post)
      render(partial: "blogit/posts/#{Blogit.configuration.include_comments}_comments", locals: { post: post, comment: Blogit::Comment.new })
    end

active_record_comments.html.erb

<div id="comments">
  <%= render post.comments %>
</div>
<% if (user_signed_in? && current_user != User.find(post.blogger_id)) %>
    <div>
<%= render partial: "blogit/comments/form", locals: { post: post, comment: comment } %>
</div>
<% end %>

comments/_form.html.erb


<%= form_for [post, comment], remote: true,
  html: {
    class: "new_blog_comment", id: "new_blog_comment" } do |f| -%>

  <p><%=t :leave_a_comment, scope: 'blogit.comments'%></p>

  <%= field do %>
    <%= f.label :body, t(:your_comment, scope: 'blogit.comments') %><br>
    <%= f.text_area :body %><br>
    <%= errors_on(comment, :body) %>
  <% end %>

  <%= actions do %>
    <%= f.submit t(:add_comment, scope: 'blogit.comments'), :disable_with => t(:adding_comment, scope: 'blogit.comments') %>
  <% end %>
<% end -%>

Reply all
Reply to author
Forward
0 new messages