2013-08-08 2 views
2

В настоящее время у меня есть полная функциональность при отображении кнопки Follow/unfollow для одного пользователя. Я могу отслеживать и отменить подписку на любого пользователя.Следуйте действиям для всех экземпляров объекта

Однако при отображении списка всех пользователей и отображении кнопки Follow/Unfollow на каждом.

Когда я нажимаю дальше, я получаю.

я получаю неопределенную локальную переменную или метод `следующий» для # < #: 0x007fa8a9b4f448> на второй линии от _unfollow.html.erb - на фотографии ниже для полной ошибки

Я проходящее в переменной, когда я делаю частичное.

<%= render 'follow_aud_form', :following => following if signed_in? %> 

Я также могу проверить «следующее» и посмотреть данные экземпляра.

После нажатия кнопки, когда я вернусь, он на самом деле следовать/unfollows выбранного пользователя, однако он генерирует ошибку первого

См ниже код

users_controller

def following 
@title = "Following" 
@user = User.find(params[:id]) 
@users = @user.followed_users 
render 'show_follow' 
end 

def followers 
    @title = "Followers" 
    @user = User.find(params[:id]) 
    @users = @user.followers 
    render 'show_follow' 
end 

show_follow.html.erb

<% @users.each do |following|%> 

     <div class="span1"> 
      <%= render 'follow_aud_form', :following => following if signed_in? %> 
     </div> 

    <% end %> 

follow_aud_form

<div id="follow_form"> 
    <% if current_user.following?(following) %> 
    <%= render 'unfollow', :following => following %> 
    <% else %> 
    <%= render 'follow', :following => following %> 
    <% end %> 
    </div> 

_follow_html

|__<%= @gaza_id = following.id %>__| 
<%= form_for(current_user.relationships.build(followed_id: @gaza_id)) do |f| %> 
    <div><%= f.hidden_field :followed_id %></div> 
    <%= f.submit "Follow",:type => :image, :src => "/assets/follow.png" %> 
<% end %> 

_unfollow.html

|__<%= @slim_id = following.id %>__| 
<%= form_for(current_user.relationships.find_by_followed_id(@slim_id), 
      html: { method: :delete }) do |f| %> 
    <%#= f.submit "Unfollow", class: "btn btn-large" %> 
    <%= f.submit "Unfollow",:type => :image, :src => "/assets/following.png" %> 
<% end %> 

Я также просматривали Users list with follow/unfollow button

enter image description here

+0

Пожалуйста, проверьте (и сообщите нам) линию, в которой возникла ошибка. Кажется, что должно быть где-то, где вы делаете some_obj.следующий (возможно, следующий? Метод внутри класса User). Пожалуйста, предоставьте логику внутри этого метода, чтобы я мог проверить. –

+0

Я часто сталкиваюсь с проблемами самостоятельно, когда я явно не использую параметр «шаблон» в моих вызовах рендеринга, может быть полезно указать полный путь и использовать блок «locals». Например, попробуйте изменить '<% = render 'follow_aud_form',: следующее => следующее, если signed_in? %> 'to' <% = render: template => 'some_controller/follow_aud_form',: locals => {: follow => follow} if signed_in?%> ' – Noz

+0

@ RafaelMartinez Добавить номер строки и фото – RedRory

ответ

0

Просто попробуйте изменить тыс е _show_follow.html.erb к:

<% @users.each do |following|%> 

    <div class="span1"> 
     <% f = signed_in? ? following : '' 
     <%= render 'follow_aud_form', :following => f %> 
    </div> 

<% end %> 

Я считаю, что единственная проблема у вас есть то, что локальная переменная :following не создается, если вы пользователь не подписан на изменение, предложенное только убеждается, что локальная переменная. созданный в любом случае.

+0

Если вы не хотите показывать «follow_aud_form», если пользователь не вошел в систему, вы должны использовать parentesis: <% = render ('follow_aud_form',: follow => follow), если signed_in? %> –

 Смежные вопросы

  • Нет связанных вопросов^_^