Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails NoMethodError at/members未定义方法'friend#u id';零级:零级_Ruby On Rails_Ruby On Rails 3_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails NoMethodError at/members未定义方法'friend#u id';零级:零级

Ruby on rails NoMethodError at/members未定义方法'friend#u id';零级:零级,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.2,现在我尝试在我的用户索引页面上添加“follow button” 我的目标是。。。当用户按下按钮一次时,按钮旁边的消息将变为“following”。当他或她再次按下按钮时,信息变为“不跟随”。默认消息为“不遵循” 然后我写了下面的代码,但收到一条错误消息。你能告诉我如何解决这个问题吗 NoMethodError at /members undefined method `friend_id' for nil:NilClass ☆index.html.erb(成员和控制器) ☆会话\控制器\会话

现在我尝试在我的用户索引页面上添加“follow button”

我的目标是。。。当用户按下按钮一次时,按钮旁边的消息将变为“following”。当他或她再次按下按钮时,信息变为“不跟随”。默认消息为“不遵循”

然后我写了下面的代码,但收到一条错误消息。你能告诉我如何解决这个问题吗

NoMethodError at /members undefined method `friend_id' for nil:NilClass
☆index.html.erb(成员和控制器)

☆会话\控制器\会话[:用户\ id]

 auth = request.env["omniauth.auth"]
member = Member.find_by_provider_and_uid(auth["provider"], auth["uid"])


   session[:user_id] = member.id

这里的问题是索引操作中的实例var@isFr返回nil。这意味着代码
Friend.where(:member\u id=>session[:user\u id],:Friend\u id=>m.id)。首先
返回nil

您可以在members#index视图中执行
,这样您就不会得到命名错误

我在您的索引操作中发现以下代码有问题:

@members.each do |m|
  @isFr = Friend.where(:member_id => session[:user_id], :friend_id => m.id ).first
end
上面代码的问题是@isFr将只保留@members数组中最后一个元素的值。最好在成员模型中为该行为添加一个方法,如下所示:

#in app/models/friend.rb
scope :get_member_id, ->(member, user_id) { where(:member_id => user_id, :friend_id => member.id ).first.try(:friend_id) }
然后在视图中使用它,如:

<% unless session[:user_id] == member.id %>   # below this line of code
  <% if Friend.get_member_id(member, session[:user_id]) == member.id %>
#在这行代码下面

希望这有帮助

下面的查询必须返回空AR

@members = Member.where("id >=1")
                  .order("created_at desc")
                  .paginate(:page => params[:page], :per_page => 10).scoped
@isFr
最终会导致
nil

  @members.each do |m|
  @isFr = Friend.where(:member_id => session[:user_id], :friend_id => 
  m.id ).first
  end
只要一句你能做的重构的话

Friend.where(:member\u id=>session[:user\u id],:Friend\u id=>@members.map(&:id)).limit(1)


但是如果你考虑一下你的模型之间的差异会更好。这样,它将通过连接查询进行优化

感谢那些给我提示的人,我用下面的代码实现了它

☆index.html.erb(成员和控制器)


为什么条件
where('id>=1')
?它是所有项目的一种替代品。感谢您的评论。我按照您的指示操作,但遇到了一条错误消息。#的未定义方法'friend_id',我检查了@isFr的内容。>>@isFr=>[#]这是数组?谢谢您的评论。我按照您的指示操作,但收到一条错误消息。NoMethodError at/members未定义的方法'friend\u id'for#。成员模型没有friend\u id列。但是会员上有很多朋友。对于我之前的错误,我深表歉意。我已经编辑了我的答案。希望这次能成功!非常感谢你。但是我在按照你的指令修改代码后遇到了这个问题。/members语法错误,意外的tLAMBDA,应为关键字\u end>>Friend!!#{where(:member\u id=>session……^>很抱歉!声明lambda时,正确的格式是
->(member){where(:member\u id=>session[:user\u id],:friend\u id=>member.id.)。首先,尝试(:friend\u id)}
。我已经编辑了我的代码以反映这一更正。:)再次感谢。更正后,我在#的/members undefined local variable或方法'session'中得到了这个.NameError。您能告诉我如何解决这个问题吗?
@members = Member.where("id >=1")
                  .order("created_at desc")
                  .paginate(:page => params[:page], :per_page => 10).scoped
  @members.each do |m|
  @isFr = Friend.where(:member_id => session[:user_id], :friend_id => 
  m.id ).first
  end
 <td>
        <div class="onoff">
            <% unless session[:user_id] == member.id %>    
                 <% if @Frids.include? member.id%>
                  <%= link_to'Off', {:controller => 'members', :action => 'index', :id =>
                  member.id}, class: "btn btn-midium btn-warning"%><br/>
                  ※既follow
                <% else %>
                   <%= link_to'On', {:controller => 'members', :action => 'index', :id =>
                  member.id}, class: "btn btn-midium btn-primary"%><br/>
                  ※未follow
               <% end %>
             <% end %>  
         </div>
      <%#= member.friends.count %>
    </td>
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

      @Frids =Friend.where(:member_id => session[:user_id]).map{|x| x.friend_id}

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

  end