未定义的方法`friend_id'用于#<activerecord :: relation:0x007fc4b54935f0> </activerecord :: relation:0x007fc4b54935f0>

时间:2013-12-23 02:20:50

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

现在我正在尝试设置切换按钮以关注某人。

<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">]

所以,我无法从@isFr中提取friend_id值。 我该如何解决这个问题?

☆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 个答案:

答案 0 :(得分:1)

问题出在这一行

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

这将响应ActiveRecord :: Relation但你需要一个Friend对象。试试这个

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