如何访问Active Record Object Values? Ruby on Rails

时间:2015-07-01 22:27:53

标签: ruby-on-rails object ruby-on-rails-4 activerecord model

我对铁轨上的红宝石相对较新。我建立了一个名为友谊的关系,它具有以下属性:

user_id, friend_id, state

在我的friendship.rb模型文件中,我创建了一个相反的方法来帮助我获得反向友谊:

class Friendship < ActiveRecord::Base

def opposite
    user = self.user_id;
    friend=self.friend_id;
    return Friendship.where(user_id:friend,friend_id:user);
  end

end

在我的视图文件中,我有:

<h1> Requests Ive sent: </h1>
<%@sent_friendships.each do |x|%>
  <%=x.opposite%><br>
  <%=x.opposite.inspect%>
<%end%>

注意:@sent_friendships在我的控制器中定义为:@sent_friendships=current_user.friendships.where(state:'pending');

查看输出:

x.opposite:

#<Friendship::ActiveRecord_Relation:0x007fd8abcf3498>

x.opposite.inspect:

#<ActiveRecord::Relation [#<Friendship id: 4, user_id: 3, friend_id: 1, created_at: "2015-07-01 21:42:21", updated_at: "2015-07-01 21:42:21", state: "requested">]>

但是在调用x.opposite.inspect之后,我如何访问特定属性,例如只是状态?如果我尝试x.opposite.state我得到错误:

undefined method `state' for #<Friendship::ActiveRecord_Relation:0x007fd8a3f612f0>

我很困惑?很明显.state是调用inspect方法后的一个属性?请帮帮忙?!

1 个答案:

答案 0 :(得分:1)

使用Active Record从对面返回的内容&#39;其中&#39;是一个ActiveRecord :: Relation,它是一个类似数组的结构。所以x.opposite.first.state应该得到你想要的东西。