ruby-on-rails - #<User::ActiveRecord_Relation:0x007fdd1adb7a00> Rails 的未定义方法 `friendships'

标签 ruby-on-rails ruby ruby-on-rails-4 many-to-many

我正在通过构建应用程序来学习 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

我将其添加到我的 users_controller 中,因为如果当前用户点击“比较数据”按钮(如下所示),他应该能够将他的数据与他的 friend 数据进行比较

    <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_path 有效,我能够将我的数据与选定的好友数据进行比较,但是当我想直接返回“我的页面”时,应用程序会给出以下错误:

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

我的friendship.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 对象,但不是单个用户。因此,当您在 View 中调用 @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/

相关文章:

ruby-on-rails - 断言assert_valid_keys的: Unknown key: :order (ArgumentError)

ruby-on-rails - Controller :Class 的未定义方法 `after_create'

ruby - Process.spawn child 没有收到 TERM

ruby-on-rails - 在 Rails 中使用 devise 时,如何添加将以两种不同方式使用该网站的两种不同类型的用户?

ruby-on-rails - 避免 Rails 将 PostgreSQL inet 类型转换为 IPAddr 对象?

ruby-on-rails - 预期响应为 < :success>, 但为 <301>

javascript - React JS - 渲染独立组件

ruby-on-rails - Rails ActiveRecord Model.uniq.pluck :id doesn't work with postgres

ruby-on-rails - 如何将 Material Design 与 Rails 结合使用

ruby - 从非 Google 系统调用时,CloudKMS 加密/解密如何安全工作?