2013-12-23 3 views
0

Теперь я пытаюсь настроить кнопку переключения, чтобы следовать за кем-то.undefined method `friend_id 'для # <ActiveRecord :: Relation: 0x007fc4b54935f0>

<div class="onoff"> 
      <% unless session[:user_id] == member.id %>  
       <% if @isFr.friend_id == member.id %> 
        <%= link_to'off', {:controller => 'members', :action => 'index', :id => 
        member.id}, class: "btn btn-midium btn-primary"%><br/> 
        ※following 
       <% else %> 
        <%= link_to'on', {:controller => 'members', :action => 'index', :id => 
        member.id}, class: "btn btn-midium btn-primary"%><br/> 
        ※not following 
       <% end %> 
      <% end %> 
     </div--> 

Но у меня появилось сообщение об ошибке.

undefined method `friend_id' for #<ActiveRecord::Relation:0x007fc4b54935f0> 

и посмотрел в @isFr и имеет

>> @isFr 
=> [#<Friend id: 196, member_id: 2, friend_id: 3, created_at: "2013-12-23 01:28:18", updated_at: "2013-12-23 01:28:18">] 

Таким образом, я не могу извлечь friend_id значение из @isFr. Как я могу это решить?

☆ members_controller

def index 
    if !checklogin? then return end 
    @members = Member.where("id >=1").order("created_at desc").paginate(:page => params[:page], :per_page => 10).scoped 

     if Friend.where(:member_id => session[:user_id], :friend_id => params[:id]).exists? then 
     Friend.where(:member_id => session[:user_id], :friend_id => params[:id]).each do |f| 
     f.destroy 
     end 
    else 
     Friend.new({:member_id => session[:user_id], :friend_id =>params[:id].to_i}).save 
    end 

     @isFr =Friend.where(:member_id => session[:user_id], :friend_id => @members.map(&:id)).limit(1) 

     respond_to do |format| 
      format.html # index.html.erb 
      format.json 
     end 

    end 

☆ index.html.erb (члены # индекс)

<table class="table"> 
    <tr> 
    <th>写真</th> 
    <th>名前</th> 
    <th>分野</th> 
    <th>場所</th> 
    <th>経験</th> 
    <th></th> 
    <%# if Member.find(session[:user_id]).admin %> 
    <%# end %> 
    </tr> 
<% @members.each do |member| %> 
    <tr> 
    <td> 
    <% if member.provider %> 
     <%=image_tag member.image ,:size=>'30x30'%> 
    <% elsif member.avatar_file_name %> 
     <%= image_tag member.avatar.url(:thumb), :width =>'30px', :height =>'30px' %> 
    <% else %> 
     <%= image_tag "love.png", :size=>'30x30' %> 
    <% end %> 
    </td> 
    <td> 
     <a href="/members/<%= member.id %>"><%= member.name %></a> 
     <% if member.provider == "facebook" %> 
      <a target="_blank" href="http://www.facebook.com/<%=member.uid %>"> <%=image_tag "fb.png" ,:size=>'20x20'%> </a> 
     <% elsif member.provider == "twitter" %> 
      <a target="_blank" href="http://www.twitter.com/<%=member.name %>"> <%=image_tag "twitter.png" ,:size=>'20x20'%> </a> 
     <% end %> 
    </td> 

    <td><%= member.field %></td> 
    <td> 
     <% if member.url.present? %> 
      <%=link_to member.place ,member.url ,:target=>["_blank"] %> 
     <% else %> 
      <%= member.place %> 
     <% end %> 
     </td> 
     <td><%= member.experience %></td> 
     <td> 
     <div class="onoff"> 
      <% unless session[:user_id] == member.id %>  
       <% if @isFr.friend_id == member.id %> 
        <%= link_to'off', {:controller => 'members', :action => 'index', :id => 
        member.id}, class: "btn btn-midium btn-primary"%><br/> 
        ※following 
       <% else %> 
        <%= link_to'on', {:controller => 'members', :action => 'index', :id => 
        member.id}, class: "btn btn-midium btn-primary"%><br/> 
        ※not following 
       <% end %> 
      <% end %> 
     </div--> 
     <%#= member.friends.count %> 
    </td> 

    <% if Member.find(session[:user_id]).admin %> 
     <td><%= link_to 'Destroy', member, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
    <% end %> 

    </tr> 
<% end %> 
</table> 

ответ

1

Проблема заключается в этой строке

@isFr =Friend.where(:member_id => session[:user_id], :friend_id => @members.map(&:id)).limit(1) 

Это будет реагировать на ActiveRecord: : Связь, но вам нужен объект Friend. Попробуйте это

@isFr =Friend.where(:member_id => session[:user_id], :friend_id => @members.map(&:id)).first 
+0

Спасибо за ваш комментарий. Я выполнил вашу инструкцию, но получил это сообщение об ошибке после нажатия кнопки.NoMethodError at/members undefined method 'friend_id 'для nil: NilClass. –

+0

Это потому, что у вас нет объекта Friend, который соответствует вашим условиям. Повторите пожалуйста свои условия. –

+0

Большое спасибо. –

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