我正在通过构建一个应用程序来学习rails。我的应用程序运行良好,直到我将此代码添加到users_controller.rb

def show
    @user = User.find(params[:id])
  @user = User.order('created_at DESC').paginate(page: params[:page], per_page: 30)

end

def compare
 if current_user.profile
   @users = User.find_by(id: params[:to].to_i) if params[:to]

    @paper_weight_total_user = @users.papers.sum(:paper_weight)
  else
    redirect_to user_path
  end
end

我将此添加到我的用户控制器,因为如果当前用户点击“比较数据”按钮(如下所示),他应该能够将他的数据与他的朋友的数据进行比较。
    <h4> <%= current_user.profile.name%> Friends</h4>
         <ul>
           <% @user.friendships.each do |friendship| %>
           <li>
            <%= link_to user_profile_path(friendship.friend), :method => :get do %>
              <%= friendship.friend.profile.name %>
              (<%= link_to "Remove", friendship, :method => :delete %>)
              <%= link_to friendship do %>

              <%= link_to 'Send message', new_message_path(to: friendship.friend.id), class: 'btn btn-default btn-xs' %>

              <%= link_to friendship do %>

              <%= link_to 'compare data', compare_friends_path(to: friendship.friend.id), class: 'btn btn-default btn-xs' %>
              <% end %>
          <% end %>
          <% end %>
          <% end %>
          </li>
         </ul>

compare_friends_路径起作用,我可以将我的数据与选定的朋友数据进行比较,但当我想直接返回“我的页面”时,应用程序会给出以下错误:
undefined method `friendships' for #<User::ActiveRecord_Relation:0x007fdd1adb7a00>

并说这一行代码(do循环)导致了错误:
  <% @user.friendships.each do |friendship| %>

我的user.rb模型有
has_many :friendships, dependent: :destroy
has_many :friends, through: :friendships

我的友谊.rb模型有
belongs_to :user
belongs_to :friend, :class_name => 'User'
belongs_to :profile

我一直在试图弄清楚为什么在添加了比较选项之后现在会发生这种情况,但是我运气不好……有谁能帮我解决这个问题或给我一个建议吗?
提前谢谢
大地

最佳答案

undefined method `friendships' for #<User::ActiveRecord_Relation:0x007fdd1adb7a00>

根据此错误消息,您的@user对象是ActiveRecord_Relation对象,而不是User类的实例,因此您得到错误。
根据您的模型设置,您可以使用:friendships获取特定用户的@user.friendships,但此@user必须是User类的实例,而不是ActiveRecord_Relation对象。
我认为问题来自于你的show方法这一行:
  @user = User.order('created_at DESC').paginate(page: params[:page], per_page: 30)

在这种情况下,@user是一个ActiveRecord_Relation对象,但不是单个用户。因此,当您在视图中调用@user.friendships时,会得到所提到的错误。
您可能需要将其重命名为@users或类似的名称,因为这样会返回一个用户集合。
而且,你已经有了@user的定义:
@user = User.find(params[:id])

其中@userUser类的一个实例。

关于ruby-on-rails - #<User::ActiveRecord_Relation:0x007fdd1adb7a00> Rails的未定义方法'friendships',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35834803/

10-13 08:57
查看更多