gpt4 book ai didi

ruby-on-rails - NoMethodError(用户的未定义方法 `primary_key'

转载 作者:行者123 更新时间:2023-12-04 06:28:17 29 4
gpt4 key购买 nike

我正在使用公共(public)事件 gem 在我的应用程序上创建事件流。为此,我有这个设置。

我已经为我的应用设置了一个友谊模型,

create_table "friendships", force: :cascade do |t|
t.integer "user_id"
t.integer "friend_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

模型看起来像这样,

belongs_to :user
belongs_to :friend, :class_name => "User"

这是我的用户模型,

has_many :friendships
has_many :friends, :through => :friendships
has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
has_many :inverse_friends, :through => :inverse_friendships, :source => :user

我已经使用 Public Activity gem 跟踪了我的电影模型,

include PublicActivity::Model
tracked owner: -> (controller, model) { controller && controller.current_user }
tracked recipient: -> (controller, model) { controller && controller.current_user.friends }
tracked :params => {
:title => :get_title,
:poster => :get_poster
}

has_and_belongs_to_many :users

当我添加新电影并因此创建新事件时,我在 Rails 控制台中收到此错误,

NoMethodError (undefined method primary_key' for User::ActiveRecord_Associations_CollectionProxy:Class):
app/controllers/movies_controller.rb:19:in
create'

那是指在我的 movies_controller 中创建定义,

def create
@movie = Movie.find_or_create_by movie_params
current_user.movies << @movie
redirect_to :root
end

这里出了什么问题?

* 根据电影参数要求 *

private
def movie_params
params.require(:movie).permit(
:title,
:image,
:imdb_rating,
:release_date,
:movie_id,
:backdrop
)
end

最佳答案

好的,找到了!你的问题在这里:

tracked recipient:  -> (controller, model) { controller && controller.current_user.friends }

我认为 tracked 方法要求模型记录(或 nil),但是您的 controller.current_user.friends 返回一个关联,所以它没有 primary_key。您可以将其更改为 controller.current_user.friends.try(:first) 以进行验证。

关于ruby-on-rails - NoMethodError(用户的未定义方法 `primary_key',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34565348/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com