0

私は私のレールの一部で変数を渡そうとしますが、このエラー

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をexibeしてみてください

  <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

コードの最後の部分で間違った変数を割り当てています。local postである必要があります。次のようにモンキー パッチを適用して動作させることができます。

<% @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

の 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

助けてくれてありがとう、私は問題を解決しますが、:collection

名前の一部を _post.html.erb に変更します

変数 @post を投稿ごとに部分的に変更します

ただし、コレクションによって渡される部分変数は、部分変数と同じ名前である必要があります。

たとえば、部分呼び出し _post_mason.html.erb の場合、部分変数は post_mason でなければなりません。すべてが理解されるのを待ちます。これで問題が解決します。:collection によって渡される変数は、部分変数と同じ名前でなければなりません。

答えてくれてありがとう、ありがとう。

于 2013-01-26T16:20:03.767 に答える