0

我尝试通过我的rails部分传递一个变量但是这个错误

SyntaxError in Posts#index

Showing /Users/overallduka/Blog1/app/views/posts/_posts_mason.html.erb where line #5 raised:
Extracted source (around line #5):

2:  
3:     <%= link_to "Add to Journal", add_post_journal_path(@post), :method => :put %>
4: 
5:     <h2><%= link_to @post.title,post_path(@post) %></h2>
6: <%= image_tag @post.image.url,:class => "thumb" %> <br>
7: 
8: <%= @post.content  %>

我尝试显示这个部分 _posts_mason.html.erb

  <div id="post"  >

    <%= link_to "Add to Journal", add_post_journal_path(@post), :method => :put %>

    <h2><%= link_to @post.title,post_path(@post) %></h2>
<%= image_tag @post.image.url,:class => "thumb" %> <br>

<%= @post.content  %>

  <br>
  <p>Por <%= @post.user.email %> em <%= @post.created_at.strftime("%d %b. %Y") %> ás <%= @post.created_at.strftime("%H:%M") %></p>



  <div id="post_footer">


  <%= link_to_function "Comentar","
  $(this).fadeOut();
if($('#comment_form_#{@post.id}').css('display') == 'none')
{
$('#comment_form_#{@post.id}').slideDown();
}
else $('#comment_form_#{@post.id}').slideUp();
$('.comentar.#{@post.id}').hide();
",:class=>"comentar"

%>

<div id="comment_form_<%= @post.id %>" style="display: none;" >

  <%= form_for [@post,@post.comments.build], :remote => true do |com| %>
      <%= com.text_area :comment %>

      <%= com.submit 'Comentar' %>


  <%end %>
  </div>


      <div class="comment_list <%= @post.id %>">
  <% @post.comments.each do |comment|   %>

      <% if comment.comment %>
                <div id="comments">
      <%= comment.user && comment.user.email %>:
           <%= comment.comment %>
                </div>
          <%end%>



   <%end%>

      </div>

<br>



  </div><!--Fim div #post_footer-->


</div>

我每个传递循环的变量,这段代码:

<% @posts.each do |post| %>


<%= render :partial => "posts_mason",:locals => { post => @post } %>


<% end %>

出了什么问题,在转换部分内容之前完美运行我不知道出了什么问题请帮忙

4

3 回答 3

1

您在第 5 行有语法错误_posts_mason.html.erb

代替 :

<h2><%= link_to @post.title,post_path(@post) %></h2>

和:

<h2><%= link_to("#{@post.title}", post_path(@post)) %></h2>

将循环更改为:

<%= render :partial => "posts_mason",:collection => @posts %>  
于 2013-01-25T20:39:58.780 回答
1

您在最后一段代码中分配了错误的变量。应该是地方邮政。你可以像这样猴子修补它来工作:

<% @posts.each do |post| %>
  <% @post=post %>
  <%= render :partial => "posts_mason" %>
<% end %>

正确的方法是像这样将局部变量分配给部分(替换每个块):

<%= render :partial => "posts_mason",:collection => @posts %>

..并在您的部分 _posts_mason.html.erb 中使用局部变量post例如:

<h2><%= link_to post.title, post_path(post) %></h2>
于 2013-01-25T22:53:10.627 回答
1

感谢您的帮助,我解决了这个问题,但是 :collection

我将部分名称更改为 _post.html.erb

并通过部分帖子更改我的变量@post

但请注意,集合传递的部分变量需要与部分名称相同,

例如,如果我的部分调用_post_mason.html.erb,我在部分中的变量必须是post_mason,我等待大家理解我,这解决了我的问题,由:collection 传递的变量必须与部分名称相同。

谢谢大家的回答对我有帮助,谢谢。

于 2013-01-26T16:20:03.767 回答